我正在将Google+登录与我的网站集成,这也允许用户使用Twitter和Facebook登录.因此,该站点的登录页面有3个按钮,每个按钮对应一个服务.
我遇到的问题是在以下场景中:
问题是,在重新访问登录页面时,我希望用户可以选择使用其他服务登录,而不是使用G +自动登录.如果用户想要使用G +登录,则可以通过单击按钮进行登录 - 然后用户将自动登录.
是否可以阻止此按钮渲染自动登录?我可以通过data-approvalprompt="force"在按钮上使用as属性来模拟它,但我不认为这是一个理想的解决方案(然后用户必须通过确认过程,我理想的是希望阻止)
cla*_*ass 29
更新
防止自动登录的最佳支持方法是使用API方法gapi.auth2.getAuthInstance().signOut(),该方法会阻止在您的网站调用后自动登录. 在这里演示.
在演示中,用户在离开页面时退出,如下面的代码所示:
window.onbeforeunload = function(e){
gapi.auth2.getAuthInstance().signOut();
};
Run Code Online (Sandbox Code Playgroud)
现在,只要用户退出网站(例如关闭窗口,导航离开),他们就会退出,并且登录按钮不会触发登录,直到用户点击它为止.
我不建议您在自己的实现中执行此操作,而是允许用户在不再希望登录时明确注销.另外,请注意我的示例是演示,您可能不想签名用户在离开您的网站时自动退出.
原帖
首先,您不应该使用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
}
Run Code Online (Sandbox Code Playgroud)
以下代码显示如何显式呈现按钮:
<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>
Run Code Online (Sandbox Code Playgroud)
如何通知用户从您的站点注销用户可能会因站点而异,但一种方法可能是设置一个cookie,指示用户的"已注销"状态,然后将其用作触发器用于阻止显式加载.当用户访问您的网站并禁用cookie或使用单独的登录浏览器时,该行为会变得有点棘手.要解决此问题,您可以执行一些复杂操作,例如在登录回调中通过XHR查询服务器上的用户状态,并假装不知道用户已登录Google+.
Jac*_*ket 26
只需在回调函数中检查g-auth-window:
function google_sign_callback(authResult){
if(authResult['g-oauth-window']){
}else if(authResult['error']) {
}
}
Run Code Online (Sandbox Code Playgroud)
Ali*_*nan 11
我有这个问题,并使用auth2.disconnect()
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
var auth2 = gapi.auth2.getAuthInstance();
auth2.disconnect();
//do other stuff
}
Run Code Online (Sandbox Code Playgroud)
编辑:您需要在断开连接之前存储令牌,因为在某些情况下,断开后id_token将变为null:
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
var idToken=profile.id_token;
googleUser.disconnect()
//use idToken for server side verification
}
Run Code Online (Sandbox Code Playgroud)
如果我是正确的,您有自己的网站登录机制,只需要谷歌登录就可以通过验证的电子邮件注册用户.在这种情况下,您可以在获得个人资料信息后轻松断开连接.下次加载页面时,您将看到"登录"按钮而不是"登录"按钮.
| 归档时间: |
|
| 查看次数: |
22491 次 |
| 最近记录: |