我们正在使用状态(ExpressJS会话)的Cookie转换为无状态(令牌)API。
我们使用单一的PassportJS身份验证策略(GoogleStrategy)。当OAuth流程完成后,Google会使用访问令牌回拨到后端路由。
以前,我们会使用req.session设置一个cookie,并将用户重定向到我们的仪表板。
使用令牌API,当Google回调后端路由时,我们会根据电子邮件(充当用户名)和访问令牌(充当密码)生成令牌。
我们如何将此令牌传递给前端(Angularjs)以便它可以进行经过身份验证的请求?
我们是否需要切换到Google的前端OAuth API?
答案 0 :(得分:0)
将令牌传递到客户端Web应用程序的一种方法是将已签名的JSON Web令牌放入cookie中,客户端应用程序可以访问和使用该cookie(将令牌附加到每个GET请求或使用它)在您的Web套接字身份验证中)。为了清楚起见,您不再使用cookie作为服务器记录状态的参考,而是只是将它们用作客户端和服务器都可以访问的存储机制,您可以在其中存储编码的令牌。 / p>
以下是 generator-angular-fullstack 的一个很好的例子:
在路由器中,从Google身份验证中接收回调:
.get('/callback', passport.authenticate('google', {
failureRedirect: '/signup',
session: false
}), auth.setTokenCookie);
和setTokenCookie函数:
function setTokenCookie(req, res) {
if (!req.user) return res.json(404, { message: 'Something went wrong, please try again.'});
var token = signToken(req.user._id, req.user.role);
res.cookie('token', JSON.stringify(token));
res.redirect('/');
}
signToken函数:
function signToken(id) {
return jwt.sign({ _id: id }, config.secrets.session, { expiresInMinutes: 60*5 });
}