2013-04-15 35 views
2

我創建了一個使用Google+登錄API的Web應用程序,但遇到了自動登錄問題。Google+登錄:從我的Web應用程序註銷時,用戶仍然使用Google登錄

我不知道我是否已經正確地實現它,這裏的問題:

  • 用戶登錄到使用了自己的Google+登錄詳細信息我的申請。
  • 現在他們已登錄到我的應用程序,但他們的谷歌帳戶。
  • 完成後,他們退出我的應用,但仍然登錄Google。
  • 現在假設不同的用戶(使用相同的機器/瀏覽器)訪問我的網站,他們會自動使用以前的用戶詳細信息登錄。

我明白這是不好的做法,避免任何一個)簽署用戶從他們的谷歌帳戶,當他們離開我的網站,或b)禁止在Google+註冊的自動行爲。

那麼如何我可以阻止這種行爲嗎?

+1

的可能重複[防止自動登錄時使用Google+登入(HTTP:/ /stackoverflow.com/questions/15484533/preventing-automatic-sign-in-when-using-google-sign-in) –

回答

1

在用戶授權您的應用程序後,Google+登錄按鈕會自動告知您的應用程序他們是誰。如果用戶想要將您的網站用於其他帳戶,則他們需要退出Google並以其他用戶身份登錄。

聽起來好像您希望用戶和您的網站之間的登錄狀態與Google用戶的登錄狀態不同。爲了做到這一點,你需要管理你自己的會話狀態。換句話說,如果用戶授權您的應用程序,該按鈕將始終觸發JavaScript回調。開發人員可以選擇忽略該信息,直到用戶點擊登錄按鈕。一些開發人員通過將單擊事件處理程序附加到按鈕來完成此操作

+0

感謝您的回覆。我並不想禁用自動登錄(我沒有多個社交登錄名,例如臉書和推特),所以在這方面這不是問題。 我只是覺得如果有人使用公共計算機,這可能是一個可能的安全問題。 但我猜想這會導致個人意識到自己的Google登錄狀態,並採取預防措施,例如取消選中「保持登錄狀態」框。 – veritas1

+0

如果您允許某人訪問您的計算機,則應該退出Google。讓某人訪問您的登錄瀏覽器是一個安全問題,不僅針對您的應用,而且針對整個Google帳戶。 –

+0

@ChrisCartland我有幾乎相同的問題,但在Google OAuth2(不是登錄)的情況下,我使用python/flask來實現它。我是初學者,我不確定如何將您的答案移植到我的特定環境中。我非常感謝,如果你可以看看我的問題在這裏:https://stackoverflow.com/questions/47150564/how-to-log-user-out-of-an-app-that-uses-google -oauth2點登錄 –

0

請參考下面問題的答案。這是非常相似的情景

Preventing automatic sign-in when using Google+ Sign-In

但即使在所提出的解決方案的谷歌+賬戶仍然會被登錄。你可以做的另一步是添加一個提示,詢問用戶註銷谷歌的Google+帳戶或你可以代表用戶調用google + logout API(沒有檢查是否有)。

0

我也有這個問題。你需要儘快登出的Gmail帳戶從Gmail權威性得到電子郵件ID:

<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.'); 
    }); 
} 

相關問題