我试图制作一个网站使用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