根据谷歌文档: 加载谷歌登录按钮后,它会立即检查用户是否已授权该应用程序。此检查称为“立即模式”,如果成功,Google 服务器会返回访问令牌并将新的授权结果对象传递给回调。如果按钮无法进行即时模式授权,则用户必须单击登录按钮才能触发访问流程。
我的 Google Plus 登录按钮是标题的一部分,注销时会加载主页,它再次呈现 google plus 按钮导致自动登录。因此,用户永远不会注销。当 G Plus 按钮被点击而不是 G Plus 按钮自身变红时,如何允许登录?
根据谷歌文档: 加载谷歌登录按钮后,它会立即检查用户是否已授权该应用程序。此检查称为“立即模式”,如果成功,Google 服务器会返回访问令牌并将新的授权结果对象传递给回调。如果按钮无法进行即时模式授权,则用户必须单击登录按钮才能触发访问流程。
我的 Google Plus 登录按钮是标题的一部分,注销时会加载主页,它再次呈现 google plus 按钮导致自动登录。因此,用户永远不会注销。当 G Plus 按钮被点击而不是 G Plus 按钮自身变红时,如何允许登录?
您有两种方法可以立即删除 Google Plus 登录。
1-不是一个好方法:在你的按钮中使用 data-approvalprompt="force" 。我在下面写了一个例子:
<span id="signinButton" >
<span
class="g-signin g-link"
data-callback="signinCallback"
data-clientid="*****.apps.googleusercontent.com"
data-cookiepolicy="single_host_origin"
data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read"
data-approvalprompt="force"
style= "cursor:pointer;">
Login With Google
</span>
</span>
这不是一个好方法,因为如果您添加它,那么 Google 会要求用户提供额外的离线访问权限。因此,由于此权限,它可能会让用户根本不会注册。
2-更好的方法:在您的 signincallback 函数中收到响应后,只需从 Google 注销即可。只需添加:
gapi.auth.signOut();
您应该在收到回复后写下这一行。最好将其保留在 request.execute(function(resp) 函数中的最后一行。
通过添加此代码,除非有人单击登录按钮,否则 Google 不会呈现登录信息。Google 也推荐这种方法。
'immediate' 参数为我做了这件事,虽然它与 'approvalprompt' 具有相同的效果,但会提示同意。Facebook 似乎更好地处理了这些选项。
gapi.signin.render("splashGPlusReg", {
'callback': GPSignInCallback,
'clientid': '<yourclientId>',
'cookiepolicy': 'single_host_origin',
'immediate': false,
'requestvisibleactions': 'http://schemas.google.com/AddActivity',
'scope': '<scopes>'
});
这不是最干净的修复,但您可以尝试过滤传递给回调的status.method
属性。authResult
authResult.status.method
过滤设置为触发的任何回调AUTO
,但处理null
(通过单个授权的 Google 帐户登录)或PROMPT
(用户选择多个 Google 帐户之一)的任何回调。
我找到了一种方法来做到这一点,也许这正是你想要的: