在Node中使用Passport.js,有没有办法允许一个用户冒充另一个用户?例如.作为应用程序的管理员,我希望能够以另一个用户身份登录,而无需知道他们的密码.
最简单的是,如果我可以更改序列化的用户数据(用户ID),我会感到满意,因此当调用deserializeUser时,它将只假设备用用户的身份.我已经尝试替换req._passport.session.user中的值和req.session.passport.user中的值,但是净效果只是我的会话似乎变得无效而Passport会将我注销.
解决方法
如果您想手动执行身份验证,Passport会提供
req.logIn
方法.即使不进行身份验证,您也可以使用它登录任何用户.
这是你如何使用它.让Admin正常登录,谁将设置isAdmin标志.
然后在visa.authenticate之前在登录路由中放置一个中间件.如果当前登录的用户是admin,这将仅根据用户名登录新用户.
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); } );