我创建了一个使用Google+登录API的web应用程序,但遇到了自动登录行为的问题。
我不确定我是否正确地实现了它,这是问题:
- 用户使用他们的Google+ Sign In详细信息登录到我的应用程序。
- 现在他们已经登录到我的应用程序,但也是他们的谷歌帐户。 当他们完成后,他们退出我的应用程序,但仍然登录到谷歌。
- 现在假设一个不同的用户(使用相同的机器/浏览器)访问我的网站,他们会使用以前的用户详细信息自动登录。
我明白这是不好的做法,避免a)当用户离开我的网站时,他们的谷歌帐户登录或b)禁用Google+登录的自动行为。
那么我怎样才能防止这种行为呢?
用户授权你的应用程序后,Google+ Sign-In按钮会自动告诉你的应用程序他们是谁。如果用户想用不同的帐户使用你的网站,那么他们需要退出谷歌,并以不同的用户登录。
听起来你想让用户和你的网站之间的登录状态不同于用户在谷歌上的登录状态。为了实现这一点,您需要管理自己的会话状态。换句话说,如果用户已经授权了你的应用,这个按钮总是会触发JavaScript回调。开发者可以选择忽略这个信息,直到用户点击登录按钮。有些开发人员通过在按钮上附加单击事件处理程序来实现这一点。
参考以下问题的答案。这与您的场景非常相似
使用Google+ sign-in时防止自动登录
但即使在这个提议的解决方案中,google+帐户仍然会登录。您可以做的另一个步骤是添加一个提示,要求用户注销google+帐户,或者您可以代表用户调用google+注销api(没有检查是否有)。
我也有这个问题。您需要在从gmail auth:
获得电子邮件id后立即退出gmail帐户。<script src="https://apis.google.com/js/platform.js?onload=renderButton" async defer></script>
<script>
function onSuccessG(googleUser) {
var profile = googleUser.getBasicProfile();
console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead.
console.log('Name: ' + profile.getName());
console.log('Image URL: ' + profile.getImageUrl());
console.log('Email: ' + profile.getEmail());
//now here write a code of login//
//
//now here write a code of login//
signOut();//call sign out function which will sign out user from their gmail accont
}
function onFailureG(error) {
console.log(error);
}
function renderButton() {
gapi.signin2.render('my-signin2', {
'scope': 'https://www.googleapis.com/auth/plus.login',
'width': 323,
'height': 35,
'longtitle': true,
'theme': 'dark',
'onsuccess': onSuccessG,
'onfailure': onFailureG
});
}
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}