node.js - NodeJS注销所有用户 session

标签 node.js mongodb passport.js meanjs

我很想在 nodeJS关闭 (注销/注销) 所有用户 session

req.logout() 仅关闭用户的当前 session 。但是对于我的安全面板,我想添加关闭ALL 用户 session 的选项。我怎样才能做到这一点?

我正在使用 MEAN.JS framework 。使用 passport.js 库和 mongoDB 保存 session :

// Express MongoDB session storage
app.use(session({
    saveUninitialized: true,
    resave: true,
    secret: config.sessionSecret,
    cookie: {
        maxAge: 15778476000,
        httpOnly: true,
        secure: false 
    },
    key: 'sessionId',
    store: new mongoStore({
        db: db.connection.db,
        collection: config.sessionCollection
    })
}));

非常感谢。

最佳答案

使用 connect-mongouserId 被保存在 sessions collection 的 mongoDB 中的一个字符串中:

{
    "_id" : "J6fsgZ4d1zKp31ml1MRm18YCdlyhvce-",
    "session" : "{\"cookie\":{\"originalMaxAge\":15778475958,\"expires\":\"2016-05-17T23:47:27.301Z\",\"secure\":false,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"56420a5a8c6601ce29bbd1c1\"}}",
    "expires" : ISODate("2016-05-17T12:48:22.049Z")
}

最后,我使用这段代码删除了他的所有 session :

var mongoose = require('mongoose'),
Schema = mongoose.Schema,
Session = mongoose.model('Session', new Schema(), 'sessions');


exports.signoutAllSessions = function(req, res) {
   var socketio = req.app.get('socketio');
   var userId = req.user.id;
   var filter = {'session':{'$regex': '.*"user":"'+userId+'".*'}};

   req.logout();
   res.redirect('/');

   Session.remove(filter,function(err,data){
       socketio.sockets.to(userId).emit('user.logout');
   });
};

API 路由调用此方法。

关于node.js - NodeJS注销所有用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740117/

相关文章:

ios - 原生 IOS 应用和 node.js

javascript - 是否可以更新对象中包含的值

javascript - 如何修复这个错误? (http ://localhost:3000/favicon. ico 404(未找到))

javascript - 我们如何使用 JavaScript 查找图像是否被修改/操作

javascript - 将文件写入与工作目录不同的目录

javascript - 模拟调用 'upvote' 的效果时出现异常。类型错误 : undefined is not a function

mongodb - Mongodb 全文搜索找不到

node.js - NodeJS 类型错误 ('JwtStrategy requires a secret or key' );

node.js - `ApplicationCredential` 实例无效。详情 : `provider` can't be blank

javascript - 使用 Node.js 和 MySQL 进行连续数据库插入(已将握手排队后无法将握手排队)