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

标签 javascript node.js passport.js

在 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/

相关文章:

javascript - 将 Bootstrap 下拉列表附加到不同的元素

javascript - 将用户重定向到另一个页面后开始文件下载 (NodeJS/Express)

javascript - $injector :modulerr AngularJS, 到目前为止尝试了一切

node.js - 与 Passport.js 一起验证验证码

node.js - Everyauth vs Passport.js?

javascript - Handlebars 模板中元素的点击功能

javascript - jQuery Mobile:无法从选择菜单中打开弹出窗口

javascript - 仅使用 javascript 更改选择选项的顺序

javascript - 鉴于node.js通常与NoSQL数据库相关联,与关系数据库相比,node.js是否更适合NoSQL数据库?

node.js - Typescript Express 请求输入