我想在重置密码后从其他浏览器注销。
我使用passport.js进行用户身份验证。
所以我需要一种这样的功能,如果我从一个浏览器更改我的密码,那么它将自动从另一个浏览器注销该用户(当切换到另一个浏览器时)。
有什么想法吗?
答案 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函数。 发送将转到服务器的功能并检查是否需要注销。
(此逻辑用于检查某些系统的过期会话)
更新:
在评论之后,我注意到我忘记了关键细节: 当然,服务器本身需要在密码更改时阻止任何操作。我的意思是客户端 - 你要注销它。