重置密码后如何从其他浏览器注销

时间:2015-12-28 06:42:46

标签: javascript node.js passport.js

我想在重置密码后从其他浏览器注销。

我使用passport.js进行用户身份验证。

所以我需要一种这样的功能,如果我从一个浏览器更改我的密码,那么它将自动从另一个浏览器注销该用户(当切换到另一个浏览器时)。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

function validateToken(token) {
return require("mongoclient").then(function (DB) {
    return DB.query({$collection: "pl.connections", $filter: {token: token}});
}).then(function (data) {
    if (data && data.result && data.result.length > 0) {
        return true;
    } else {
        return false;
    }
})
}

不是一个完整的实现,而是一个用mongo

验证节点中令牌的示例代码

在您的应用中添加一些功能。在数据库中维护一个与用户对应的令牌表,以便在更改密码后使特定用户的表中的令牌失效。它不仅仅是一个想法,它是许多应用程序采用的工作策略。

答案 1 :(得分:0)

例如,您可以在users表中添加expireAfter标志。当您需要注销某人时,只需将他们的expireAfter更改为当前时间。

如果当前时间戳大于expireAfter,那么您只需在请求到来时清除浏览器中的Cookie。 登录时设置expireAfter到2030年1月1日

// something like that
var app = express();

app.use(function(req, res, next) {
  var user = { ... } // load user from db

  if (user.expireAfter >= new Date().getTime()) {
    res.clearCookie('user_id') // or whatever you have
    var err = new Error('not authorized, please re-login');
    err.status = 403;
    return next(err);
  }

  next();
});

... code code code ...

答案 2 :(得分:0)

您可以轻松地使用会话ID 对此文件进行存档,该会话ID每次对用户进行身份验证时都会生成,并且对于用户而言是唯一的。但是您必须跟踪 Id

在此解决方案中,我使用express-session

在成功向用户分配了req.session.id认证之后,它是一个字母数字Id(6QP2t2_ffzkLNPHWNIEuRSXEvNm4lzLb)。您可以在帐户登录时保存该用户会话ID,然后可以随时从内存存储中检索该用户会话并将其销毁:

let session = require('express-session');

const id = req.session.id

sessionStore = express.session.MemoryStore();
sessionStore.get(id, function(err, sess) {
  sess.destroy (function (err) {
   console.log(err, 'if any')
  });
});

答案 3 :(得分:-2)

您可以在客户端创建计时器。 使用setInterval函数。 发送将转到服务器的功能并检查是否需要注销。

(此逻辑用于检查某些系统的过期会话)

更新:

在评论之后,我注意到我忘记了关键细节: 当然,服务器本身需要在密码更改时阻止任何操作。我的意思是客户端 - 你要注销它。