我是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之间有什么区别?
3条答案
按热度按时间e1xvtsh31#
您可以像使用
passport-jwt
一样使用passport-facebook,并使用新策略,这样您就可以在数据库中保存Facebook用户令牌并返回令牌flseospp2#
看起来好像当前您正在将令牌发送回最终用户。您如何保存客户端?我建议使用简单的JWT库,如jsonwebtoken,并将令牌设置为httpOnly cookie。如果您当前将其保存在localStorage中,则可能更容易受到XSS攻击。以下是我当前如何处理用户的JWT设置和检查的要点:https://gist.github.com/briancw/8c2021817c3bd34972e8e8deb6048a4f
hs1ihplo3#
你可以先使用passport-jwt auth策略,然后在passport-facebook策略中将参数
passReqToCallback: true
传递给super(),并添加request
作为validate
函数的第一个参数,在该函数中,你现在可以合并facebook oauth响应和来自passport-jwt策略的req.user
。字符串