我試圖製作一個網站使用Google Sign For Websites.主要是爲了瞭解它是如何工作的。使用Google oAuth 2.0時刷新新用戶登錄頁面
我已經按照該教程Google提供的步驟進行了操作。用戶可以成功登錄到我的網站,它可以將用戶ID傳遞到後端,然後使用php腳本驗證ID服務器端。
然後PHP會在網站上爲用戶創建一個會話。我無法弄清楚的是,當用戶點擊Google登錄按鈕並且登錄成功時,我將如何刷新頁面。刷新頁面將允許主頁重新加載新的php會話數據。
<div class="g-signin2 signin-button" data-onsuccess="onSignIn" data-theme="dark"></div>
function onSignIn(googleUser){
// The ID token you need to pass to your backend:
var id_token = googleUser.getAuthResponse().id_token;
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://mywebsite.com/tokensignin.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
console.log('Signed in as: ' + xhr.responseText);
};
xhr.send('idtoken=' + id_token);
};
我使用簡單location.reload()
代碼的onload =函數()部的內側試過。這會導致頁面在每次加載時都會無限次地刷新,但是由於Google每次都驗證用戶是否通過此變量登錄了該變量。
我試過looking through their reference使用GoogleAuth.isSignedIn.listen(listener)
來監視任何更改,但它似乎並未完全滿足我的要求,或者我沒有正確使用它,因爲我不完全知道監聽器應該是什麼。
另一種選擇可能是使用它們的GoogleAuth.attachClickHandler(container, options, onsuccess, onfailure)
函數,但我不完全確定如何正確配置選項字段/變量。
如果有人能提供一些關於這個世界如何工作的見解,我將不勝感激。
總結如果用戶已經使用Google登錄我的網站,我希望網頁不做任何事情,如果他們點擊登錄按鈕,登錄成功後我想刷新他們所在的頁面。
這仍然不能解決問題,因爲它仍然會創建無限循環的頁面刷新。當按鈕被點擊並且登錄完成時它將觸發刷新。但是,一旦刷新完成頁面加載,它就會再次發送請求。由於每次加載頁面時,Google都會處理登錄信息,以查看用戶是否仍然登錄到網站。如果他們登錄到該站點,則登錄成功完成。然後導致登錄被再次「完成」。 – Jem
@New_Wav你可以檢查我的編輯嗎? –
當我在第二天或第二天有空時,我會試試這個。我認爲這可能會成爲最可靠的方法。我在最後一天左右對API做了一些額外的嘗試。有些功能會查找用戶狀態的變化,例如GoogleAuth.isSignedIn.listen,但這些功能會引起一些已經存在的問題。每次頁面加載時都會檢查狀態更改的偵聽,並再次創建無限循環刷新。檢查新已登錄vs的cookie,與會話配對以驗證數據將成爲一種簡單而安全的方式來執行此操作 – Jem