在同一应用程序上使用 Passport Local 和 JWT 策略(在同一条路线上)

Posted

技术标签:

【中文标题】在同一应用程序上使用 Passport Local 和 JWT 策略(在同一条路线上)【英文标题】:Use Passport Local & JWT Strategy on same app (on same route) 【发布时间】:2017-05-11 13:06:51 【问题描述】:

所以我的路线(用于'/dash')如下所示:

// validating using JWT
router.post('/dash', passport.authenticate('jwt', session: false), function (req, res) 
    res.json('success': true);
);

// validating using LOCAL
router.post('/dash', authenticationHelpers.isAuth, function (req, res) 
    res.json('success': true);
);

// authenticationHelpers.isAuth
function isAuth(req, res, next) 
    if (req.isAuthenticated())
        return next();
    res.status(401).json("authenticated": false);

那么,我如何在同一个应用程序上(在同一条路线上)同时使用 Local 和 JWT 策略?我如何将它们结合起来。

注意:本地为网页应用,JWT 为移动应用

【问题讨论】:

【参考方案1】:

终于明白了。

修改isAuth函数:

function isAuth(req, res, next) 
    if (req.headers.authorization) 
        passport.authenticate('jwt', session: false, function (err, user, info) 
            if ((!err || !info) && user) 
                req.user = user;
                return next();
            
            res.status(401).json(authenticated: false, message: "Login expired.");
        )(req, res, next);
     else 
        if (req.isAuthenticated())
            return next();
        res.status(401).json(authenticated: false);
    

欢迎提出建议...

【讨论】:

以上是关于在同一应用程序上使用 Passport Local 和 JWT 策略(在同一条路线上)的主要内容,如果未能解决你的问题,请参考以下文章

讨论:本地存储中 Passport-local JWT Token 的关注

在 node.js 中使用 passport-local 和 bcrypt 检查和更新密码

找到一种使用 passport-local-mongoose 更新用户护照的方法

带有 Passport-Local 和 deSerializeUser 问题的简单身份验证

Passport.JS 卡在重定向

Passport Local Mongoose 错误:未提供用户名