护照-谷歌-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 无法注销用户的主要内容,如果未能解决你的问题,请参考以下文章

谷歌 Oauth 2.0 注销

在 laravel 护照中注销用户

护照注销()错误:对于模型“somemodel(不是用户模型)”的路径“_id”处的值“注销”,转换为 ObjectId 失败

如何彻底销毁护照/快递会话?

Spring Security OAuth2 AngularJS |注销流程

强制注销facebook oauth