更新
防止自动登录的最佳支持方法是使用 API 方法,该方法gapi.auth2.getAuthInstance().signOut()
将在您的站点被调用后阻止自动登录。 演示在这里。
在演示中,用户在离开页面时退出,如以下代码所示:
window.onbeforeunload = function(e){
gapi.auth2.getAuthInstance().signOut();
};
现在,无论何时用户退出站点(例如关闭窗口、导航离开),他们都会被注销,并且登录按钮不会触发登录,直到用户单击它。
我不建议您在自己的实现中执行此操作,而是允许用户在他们不再希望登录时明确退出。另外,请注意我的示例是一个演示,您可能不想签名用户离开您的网站时会自动退出。
原帖
首先,您不应该使用 data-approvalprompt="force" ,因为这会导致向您的应用程序/客户端发出额外的授权子令牌,并且设计用于在凭据丢失后需要重新授权用户的场景服务器-边。
其次,您可能不希望出现用户需要点击登录的行为,因为他们已经“登录”到他们的 Google 帐户,并且需要再次登录(或触发登录)可能会造成混淆,分别为您的网站。
如果您真的想这样做,您将为登录按钮执行显式渲染,但不会按照Google+ 登录文档中的说明调用 gapi.signin.render,直到您知道用户不会自动获得登录。
以下代码显示了如何启用登录按钮的显式呈现:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<head>
<script type="text/javascript">
var token = "";
function onSigninCallbackVanilla(authResponse){
// in a typical flow, you show disconnect here and hide the sign-in button
}
以下代码向您展示了如何显式呈现按钮:
<span id="signinButton">
<button id = "shim" onclick="gapi.signin.go(); $('#shim').hide();">Show the button</button>
<span
class="g-signin"
data-callback="onSigninCallbackVanilla"
data-clientid="YOUR_CLIENT_ID"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/plus.login">
</span>
</span>
您如何传达用户已退出您的站点可能会因站点而异,但一种方法可能是设置一个 cookie,指示用户的“已退出”状态,然后将其用作触发器用于阻止显式加载。当用户访问您的网站并禁用 cookie 或使用单独的登录浏览器时,该行为会变得有点棘手。为了解决这个问题,您可以做一些复杂的事情,例如在登录回调中通过 XHR 从您的服务器查询用户状态,并假装不知道用户已登录 Google+。