混合护照-facebook和passport-jwt的最佳方法是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混合护照-facebook和passport-jwt的最佳方法是什么?相关的知识,希望对你有一定的参考价值。
我是Node.js开发的新手,目前在我的空闲时间从事宠物项目。
到目前为止,我已经使用passport和passport-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有什么区别?
你可以像使用passport-facebook一样使用passport-jwt
和新策略,这样你就可以在你的数据库中保存Facebook用户令牌并返回你的令牌
看起来好像目前您正在将令牌发回给最终用户。你是如何拯救那个客户端的?我建议使用像jsonwebtoken这样的简单JWT库,并将令牌设置为httpOnly cookie。如果您当前将其保存在localStorage中,则可能更容易受到XSS攻击。以下是我目前正在处理如何为用户设置和检查JWT的要点:https://gist.github.com/briancw/8c2021817c3bd34972e8e8deb6048a4f
以上是关于混合护照-facebook和passport-jwt的最佳方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章
护照-facebook-token vs 护照-facebook
Facebook iOS SDK 和护照-facebook 身份验证
使用带护照本地的护照Facebook策略时无法将用户序列化到会话中