che*_*nop 11 node.js express passport.js json-web-token passport-google-oauth
我想在谷歌登录时使用JWT - 因为我需要禁用会话并以某种方式将用户模型传递回客户端.所有示例都使用谷歌回调,神奇地重定向到'/'.
我如何:
1.使用passport-google-oauth2时禁用会话.
2.在google身份验证后res.send()用户到客户端.
如果我没有朝着正确的方向前进,请随意提出替代方案.
che*_*nop 11
通过一些见解来管理以克服这个问题:
1.在express中禁用会话 - 只需删除会话的中间件
// app.use(session({secret: config.secret}))
Run Code Online (Sandbox Code Playgroud)
2.使用Google身份验证时实际发生的情况是,有一个重定向到谷歌登录页面,如果登录成功,它会将您重定向到您提供的URL.
这实际上意味着一旦谷歌调用你的回调你不能做res.send(令牌,用户) - 它根本不起作用(任何人都可以详述为什么?).因此,您可以通过执行操作重定向到客户端res.redirect("/").但是整个目的是传递令牌,这样你也可以做到res.redirect("/?token=" + token).
app.get( '/auth/google/callback',
passport.authenticate('google', {
//successRedirect: '/',
failureRedirect: '/'
, session: false
}),
function(req, res) {
var token = AuthService.encode(req.user);
res.redirect("/home?token=" + token);
});
Run Code Online (Sandbox Code Playgroud)
但客户如何获得用户实体?所以你也可以以同样的方式传递用户,但它感觉不适合我(在参数列表中传递整个用户实体......).所以我做的是让客户端使用令牌并检索用户.
function handleNewToken(token) {
if (!token)
return;
localStorageService.set('token', token);
// Fetch activeUser
$http.get("/api/authenticate/" + token)
.then(function (result) {
setActiveUser(result.data);
});
}
Run Code Online (Sandbox Code Playgroud)
这意味着另一个http请求 - 这让我觉得也许我没有正确的令牌概念.随意赐教.
| 归档时间: |
|
| 查看次数: |
4194 次 |
| 最近记录: |