-
Notifications
You must be signed in to change notification settings - Fork 2
/
login-checker.js
68 lines (64 loc) · 2.24 KB
/
login-checker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
'use strict';
let db = require('./db');
let utils = require('./utils');
let middleware = (req, res, next) => {
// Check if cookie named access_token exist
if (typeof req.cookies.access_token === 'undefined') {
req.logined = false;
next();
return;
}
else {
let conn = db.getConn();
// Get more info about the access_token
conn.query({
sql: [
'SELECT fl_access_tokens.id, fl_access_tokens.user_id, fl_access_tokens.last_activity,',
' fl_access_tokens.lifetime, fl_users.username, fl_users.avatar_url',
'FROM fl_access_tokens ',
'INNER JOIN fl_users ',
' ON fl_users.id = user_id ',
'WHERE fl_access_tokens.id = ?'
].join(' '),
values: [req.cookies.access_token]
}, (err, table) => {
if (err) {
res.render('error', {code: '500', msg: 'MySQL Error.'});
utils.log(err);
return;
}
if (table.length !== 1) {
req.logined = false;
next();
return;
}
else {
let tokenInfo = {
id: table[0].id,
userId: table[0].user_id,
userName: table[0].username,
lastActivity: table[0].last_activity,
lifetime: table[0].lifetime,
avatar: '/assets/avatars/' + (table[0].avatar_url || 'default.jpg'),
};
// Check if expired.
if (Math.ceil(Date.now() / 1000) > tokenInfo.lifetime + tokenInfo.lastActivity) {
// Expired.
req.logined = false;
next();
return;
}
else {
// Seems that the token is valid. Let him pass.
req.logined = true;
req.loginInfo = {
username: tokenInfo.userName,
avatar: tokenInfo.avatar
};
next();
}
}
});
}
};
module.exports = middleware;