【问题标题】:What's the best way to mix passport-facebook and passport-jwt?混合护照-facebook和护照-jwt的最佳方法是什么?
【发布时间】:2016-08-14 20:51:31
【问题描述】:

我是 Node.js 开发的新手,目前在空闲时间从事一个宠物项目。

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

现在我正在考虑将其与某种 Facebook 身份验证混合使用,但仍想坚持使用令牌身份验证。

目前这是我生成和获取令牌的方式:

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);

为了验证我执行以下操作:

let user = require('../../app/controllers/user-controller');
app.route('/api/todos')
        .get(user.validateLogin, todos.list)
        .post(user.validateLogin, todos.create);

用户控制器:

exports.validateLogin = passport.authenticate('jwt', {
    session: false
});

任何人都可以提出一个巧妙的方法来混合这两种策略?我应该使用express-jwt 吗? express-jwt 和 passport-jwt 有什么区别?

【问题讨论】:

    标签: node.js passport.js mean-stack jwt passport-facebook


    【解决方案1】:

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

    【讨论】:

    • 这是最常用的方法。您可以为身份验证实施多种护照策略,并在成功时返回您的 jwt。将是一个新的身份验证路由,如果用户已经有一个帐户并使用 fb 登录,则在 DB 中查找电子邮件,如果存在则向您的用户发送 jwt。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2020-09-26
      • 2019-01-06
      • 1970-01-01
      • 2019-05-23
      • 2019-06-23
      • 2023-04-06
      • 2020-05-23
      • 2015-07-15
      相关资源
      最近更新 更多