护照-谷歌-oauth 无法注销用户
Posted
技术标签:
【中文标题】护照-谷歌-oauth 无法注销用户【英文标题】:passport-google-oauth unable to logout user 【发布时间】:2014-10-20 13:37:01 【问题描述】:我使用passport-google-oauth
模块在我使用Express.js
构建的Web 应用程序上对用户进行身份验证。注销事件是这样处理的:
app.get('/logout', function(req, res)
console.log("logged out!");
req.logout();
res.redirect('/');
);
虽然这确实将用户重定向到登录页面(/
),但我不确定它是否真的将他注销。单击注销后,当我在新选项卡中打开Gmail
时,我仍然在那里登录(不,我之前没有登录Gmail
)。我怎样才能解决这个问题?另外,req.logout()
做了什么来注销用户?
【问题讨论】:
更多详情请告诉我 【参考方案1】:这是完全正常的。 当用户使用他的 Google 帐户登录您的应用程序时,他也会登录所有 Google 服务。
req.logout()
仅销毁在用户登录时由 Passport 创建的会话。该会话仅链接到您的应用程序,而不是链接到整个用户的 Google 个人资料。
如果您还想从他的 Google 帐户中注销用户,则必须通过单击按钮或类似的方式将他重定向到 https://accounts.google.com/logout
。
但这是一个备受争议的政策,因为如果您已经登录到 gmail、YouTube 等...,您将同时从所有 Google 服务中注销。很烦人。
如需了解更多信息,请查看 jmort253 的this great answer。
【讨论】:
【参考方案2】:那是因为谷歌的会话没有过期,你可以在谷歌结束时使用这个。
// route for logging out
app.get('/logout', function(req, res)
req.session.destroy(function(e)
req.logout();
res.redirect('/');
);
);
它会从应用程序中破坏您的会话。但如果你想完全退出谷歌账户,你可以重定向到
https://mail.google.com/mail/u/0/?logout&hl=en
地址
【讨论】:
以上是关于护照-谷歌-oauth 无法注销用户的主要内容,如果未能解决你的问题,请参考以下文章
护照注销()错误:对于模型“somemodel(不是用户模型)”的路径“_id”处的值“注销”,转换为 ObjectId 失败