passport-google-oauth无法注销用户

时间:2014-08-27 04:58:51

标签: node.js oauth oauth-2.0 google-oauth passport.js

我使用passport-google-oauth模块对使用Express.js构建的Web应用程序上的用户进行身份验证。注销事件以这种方式处理:

app.get('/logout', function(req, res) {
    console.log("logged out!");
    req.logout();
    res.redirect('/');
});

虽然这会将用户重定向到登录页面(/),但我不确定它是否真的将其记录下来。单击注销后,当我在新选项卡中打开Gmail时,我仍然在那里登录(不,我之前没有登录Gmail)。我怎样才能解决这个问题?此外,req.logout()如何将用户注销?

2 个答案:

答案 0 :(得分:4)

这是完全正常的。 当用户使用他的Google帐户登录 您的应用时,他还会登录 所有Google服务。

req.logout()仅会在用户登录时销毁Passport创建的会话。该会话仅与您的应用程序相关联,而不是与整个用户的Google个人资料相关联。

如果您想要从他的Google帐户中注销该用户,则必须通过点击按钮或类似内容将其重定向到https://accounts.google.com/logout

但这是一个非常有争议的政策,因为如果您已经登录gmail,YouTube等...,您将同时从所有Google服务中退出。非常讨厌。

有关详细信息,请查看jmort253的this great answer

答案 1 :(得分:2)

这是因为谷歌的会话未过期,你可以在google端使用这个。

// route for logging out
app.get('/logout', function(req, res) {
    req.session.destroy(function(e){
        req.logout();
        res.redirect('/');
    });
});

它会从app中销毁你的会话。但如果您想要从谷歌帐户完全注销,您可以重定向到

  

https://mail.google.com/mail/u/0/?logout&hl=en

地址