使用JWT进行用户身份验证时,服务器端是否有任何方法可以确定当前是否已登录一个或多个用户?
我手边的用例是发送推送通知-我只想向当前登录的用户发送通知。
答案 0 :(得分:0)
由于服务器正在启动检查用户是否当前的连接过程,因此您需要类似于WebSockets的东西。您可以使用例如Socket.IO
使用 map 维护连接的客户端的集合对于您的用例而言可能更为实用。
const sessionsMap = {};
io.on('connection', (socket) => {
const sessionId = socket.id;
socket.emit('askForJWT');
socket.on('receivedJWT', (jwt) => {
if (isValid(jwt)) {
const userId = extractUserIdFromJWT(jwt);
sessionsMap[sessionId] = userId;
}
});
socket.on('disconnect', () => {
delete sessionsMap[sessionId];
});
});
遍历地图中的值以(使用您选择的API)向其发送通知。
function sendNotification(message) {
const listOfUsersIds = Object.values(sessionsMap);
listOfUsersIds.forEach((userId) => {
// Here you send the notification with your API of choice
api.send({message, userId});
});
}