mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-10 16:05:49 +01:00
feat: track login sessions for admin dashboard reporting
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
"forum-traffic": "Forum Traffic",
|
"forum-traffic": "Forum Traffic",
|
||||||
"page-views": "Page Views",
|
"page-views": "Page Views",
|
||||||
"unique-visitors": "Unique Visitors",
|
"unique-visitors": "Unique Visitors",
|
||||||
|
"logins": "Logins",
|
||||||
"new-users": "New Users",
|
"new-users": "New Users",
|
||||||
"posts": "Posts",
|
"posts": "Posts",
|
||||||
"topics": "Topics",
|
"topics": "Topics",
|
||||||
|
|||||||
@@ -117,14 +117,16 @@ async function getStats() {
|
|||||||
|
|
||||||
const results = await Promise.all([
|
const results = await Promise.all([
|
||||||
getStatsForSet('ip:recent', 'uniqueIPCount'),
|
getStatsForSet('ip:recent', 'uniqueIPCount'),
|
||||||
|
getStatsForSet('sessions:recent', 'loginCount'),
|
||||||
getStatsForSet('users:joindate', 'userCount'),
|
getStatsForSet('users:joindate', 'userCount'),
|
||||||
getStatsForSet('posts:pid', 'postCount'),
|
getStatsForSet('posts:pid', 'postCount'),
|
||||||
getStatsForSet('topics:tid', 'topicCount'),
|
getStatsForSet('topics:tid', 'topicCount'),
|
||||||
]);
|
]);
|
||||||
results[0].name = '[[admin/dashboard:unique-visitors]]';
|
results[0].name = '[[admin/dashboard:unique-visitors]]';
|
||||||
results[1].name = '[[admin/dashboard:new-users]]';
|
results[1].name = '[[admin/dashboard:logins]]';
|
||||||
results[2].name = '[[admin/dashboard:posts]]';
|
results[2].name = '[[admin/dashboard:new-users]]';
|
||||||
results[3].name = '[[admin/dashboard:topics]]';
|
results[3].name = '[[admin/dashboard:posts]]';
|
||||||
|
results[4].name = '[[admin/dashboard:topics]]';
|
||||||
cache.set('admin:stats', results, 600000);
|
cache.set('admin:stats', results, 600000);
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -357,6 +357,7 @@ authenticationController.onSuccessfulLogin = async function (req, uid) {
|
|||||||
user.updateLastOnlineTime(uid),
|
user.updateLastOnlineTime(uid),
|
||||||
user.updateOnlineUsers(uid),
|
user.updateOnlineUsers(uid),
|
||||||
analytics.increment('logins'),
|
analytics.increment('logins'),
|
||||||
|
db.incrObjectFieldBy('global', 'loginCount', 1),
|
||||||
]);
|
]);
|
||||||
if (uid > 0) {
|
if (uid > 0) {
|
||||||
await db.setObjectField(`uid:${uid}:sessionUUID:sessionId`, uuid, req.sessionID);
|
await db.setObjectField(`uid:${uid}:sessionUUID:sessionId`, uuid, req.sessionID);
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ module.exports = function (User) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await cleanExpiredSessions(uid);
|
await cleanExpiredSessions(uid);
|
||||||
await db.sortedSetAdd(`uid:${uid}:sessions`, Date.now(), sessionId);
|
await db.sortedSetsAdd([`uid:${uid}:sessions`, 'sessions:recent'], Date.now(), sessionId);
|
||||||
await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
|
await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user