如何在Node中使用Passport.js模拟另一个用户?

use*_*094 6 javascript node.js passport.js

在Node中使用Passport.js,有没有办法允许一个用户冒充另一个用户?例如.作为应用程序的管理员,我希望能够以另一个用户身份登录,而无需知道他们的密码.

最简单的是,如果我可以更改序列化的用户数据(用户ID),我会感到满意,因此在deserializeUser调用它时,它将只假设备用用户的身份.我已经尝试替换at值req._passport.session.user和at 值,req.session.passport.user但净效果只是我的会话似乎变得无效而Passport会将我记录下来.

lag*_*lex 12

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);
    }
);
Run Code Online (Sandbox Code Playgroud)