首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合passport-facebook和passport-jwt的最佳方式是什么?

混合passport-facebook和passport-jwt的最佳方式是什么?
EN

Stack Overflow用户
提问于 2016-04-21 22:51:46
回答 2查看 1.2K关注 0票数 10

我对Node.js开发还是个新手,目前在空闲时间做一个自己喜欢的项目。

到目前为止,我已经使用passportpassport-jwt为该策略创建了JWT身份验证,并且我正在我的所有RESTful API中使用它。

现在,我正在考虑将其与某种Facebook身份验证混合在一起,我仍然希望坚持使用令牌身份验证。

目前,我就是这样生成和获取令牌的:

代码语言:javascript
复制
exports.authenticate = function(req, res) {
    User.findOne({
        email: req.body.email
    }, function(err, user) {
        if (err)
            return res.status(400).send(getErrorMessage(err));

        if (!user) {
            res.status(400).send({
                success: false,
                message: 'Authentication failed. User not found.'
            });
        } else {
            if (user.checkPassword(req.body.password)) {

                let token = jwt.encode(user, config.secretPhrase);

                res.json({
                    success: true,
                    token: 'JWT ' + token
                });
            } else {
                res.status(401).send({
                    success: false,
                    message: 'Authentication failed. Wrong password.'
                });
            }
        }
    });
};

app.route('/api/users/authenticate')
        .post(user.authenticate);

为了验证,我做了以下操作:

代码语言:javascript
复制
let user = require('../../app/controllers/user-controller');
app.route('/api/todos')
        .get(user.validateLogin, todos.list)
        .post(user.validateLogin, todos.create);

用户控制器:

代码语言:javascript
复制
exports.validateLogin = passport.authenticate('jwt', {
    session: false
});

有没有人能建议一种巧妙的方法来混合这两种策略?我应该使用express-jwt吗?express-jwt和passport-jwt有什么不同?

EN

回答 2

Stack Overflow用户

发布于 2017-12-20 17:43:03

您可以像在新策略中使用passport-jwt一样使用passport-facebook,这样您就可以将Facebook用户令牌保存在数据库中并返回令牌

票数 1
EN

Stack Overflow用户

发布于 2017-12-20 17:16:46

看起来您当前正在将令牌发回给最终用户。你是如何保存客户端的?我推荐使用简单的JWT库,比如jsonwebtoken,并将token设置为httpOnly cookie。如果您当前将其保存在localStorage中,那么您可能更容易受到XSS攻击。下面是我当前如何为用户处理设置和检查JWT的要点:https://gist.github.com/briancw/8c2021817c3bd34972e8e8deb6048a4f

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36773232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档