使用Passport Local&相同应用程序的JWT策略(在同一路线上)

时间:2016-12-27 08:50:12

标签: node.js authentication express passport.js jwt

所以我的路线(对于'/ 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 个答案:

答案 0 :(得分:3)

终于明白了。

修改 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});
    }
}

欢迎提出意见......