谷歌API登录按钮:基本与自定义



我正在为网站添加谷歌登录按钮。在文档中,谷歌提供了两个选项,一个"基本"按钮:

https://developers.google.com/identity/sign-in/web/sign-in

和使用signin2.render():的"自定义"按钮

https://developers.google.com/identity/sign-in/web/build-button

我遇到的问题是这两个按钮表现出不同的行为。如果我使用任一按钮登录,按钮的"标题"将从"登录"更改为"已登录",以反映登录状态。但是,如果我现在刷新页面,则基本按钮将保留标题"已登录",而自定义按钮将其标题改回"登录",这表明(错误地)登录状态在页面刷新过程中发生了更改。

如果我通过运行在浏览器控制台中手动检查刷新后的登录状态

auth = gapi.auth2.getAuthInstance()
auth.isSignedIn.get()

我得到true作为返回,表明刷新确实没有改变登录状态,这与按钮标题的更改相反。

所以我的问题是:如何让自定义按钮的行为像基本按钮一样,这样它的标题在刷新时就不会改变?我喜欢的基本按钮的另一个(相关的,我认为)行为是,在每次页面加载时(如果用户登录)都会调用按钮的"onsuccess"回调,而自定义按钮则不会这样做。因此,我也想更改自定义按钮上的这种行为,使其与基本按钮的行为相匹配。如有任何建议,我们将不胜感激!


我传递给渲染的参数如下:

function renderButton() {
gapi.signin2.render('mybutton', {
'scope': 'profile email',
'width': 125,
'height': 40,
'longtitle': false,
'theme': 'light',
'onsuccess': onSuccess,
'onfailure': onFailure
});
}

您能提供传递给按钮的参数吗?你能确认JS控制台中没有任何错误,也没有任何400/403/404/4xx请求吗?

我已经使用以下代码测试了这个功能,它似乎运行得很好(您必须用实际的CLIENT_ID替换YOUR_CLIENT_ID)。

<head>
<meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
</head>
<body>
<script>
function onSuccess(googleUser) {
console.log('onSuccess!');
}
function onCustomSuccess(googleUser) {
console.log('onCustomSignIn!');
}
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
function onLoad() {
gapi.signin2.render('custom_signin_button', {
'onsuccess': onCustomSuccess
});
}
</script>
<div class="g-signin2" data-onsuccess="onSuccess"></div>
<div id="custom_signin_button"></div>
<a href="#" onclick="signOut();">Sign out</a>
<script src="https://apis.google.com/js/platform.js?onload=onLoad" async defer></script>
</body>
</html>

编辑:将基本作用域声明为head的元标记是最好的解决方案。

<meta name="google-signin-scope" content="profile email">

相关内容

  • 没有找到相关文章

最新更新