在 Node 中使用 Passport.js,有没有办法允许一个用户冒充另一个用户?例如。作为应用程序的管理员,我希望能够以另一个用户的身份登录,而不知道他们的密码。
最简单的是,如果我可以更改序列化的用户数据(用户 ID),那么当 deserializeUser
被调用时,它只会假设备用用户的身份。我已经尝试替换 req._passport.session.user
的值和 req.session.passport.user
的值,但最终效果只是我的 session 似乎变得无效并且 Passport 将我注销。
最佳答案
Passport 提供一个req.logIn
方法,以防您想手动进行身份验证。您可以使用它登录任何用户,甚至无需身份验证。
这是您可以使用它的方法。让管理员正常登录,他将设置 isAdmin
标志。
然后在您的登录路由中的 passport.authenticate
之前放置一个中间件。这将仅根据用户名登录新用户,如果当前登录用户 isAdmin
。
app.post('/login',
function forceLogin(req, res, next) {
if (!req.user.isAdmin) return next(); // skip if not admin
User.findOne({
username: req.body.username // < entered username
}, function(err, user) {
// no checking for password
req.logIn(user);
res.redirect('/users/' + user.username);
});
},
passport.authenticate('local'),
function(req, res) {
res.redirect('/users/' + req.user.username);
}
);
关于javascript - 我如何在 Node 中使用 Passport.js 模拟另一个用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143064/