阻止谷歌自动触发data-onsuccess ="onSignIn"

Del*_*mas 10 javascript php oauth

我做谷歌连接让用户使用他们的谷歌帐户登录.

我做的是,创建一个按钮

<div class="g-signin2 social_signin" data-onsuccess="onSignIn"></div>
Run Code Online (Sandbox Code Playgroud)

然后创建onSignIn()

<script>
  function onSignIn(googleUser) {
    // Useful data for your client-side scripts:
    var profile = googleUser.getBasicProfile();
    console.log("ID: " + profile.getId()); // Don't send this directly to your server!
    console.log("Name: " + profile.getName());
    console.log("Image URL: " + profile.getImageUrl());
    console.log("Email: " + profile.getEmail());

    // The ID token you need to pass to your backend:
    var id_token = googleUser.getAuthResponse().id_token;
    console.log("ID Token: " + id_token);
  };
</script>
Run Code Online (Sandbox Code Playgroud)

然后将该令牌发送到PHP服务器以进行验证并获取数据.这很好.

但我的问题是,当用户从我的网站注销时,谷歌会自动触发'onSignIn'而不点击我创建的按钮.因此,当用户注销时,用户会自动再次登录.

你能帮助我防止这种自动登录吗?或者我可以取消授权用户吗?

小智 10

只需添加onclick并创建clicked的全局变量(默认为false),并且该变量为true即可调用BasicProfile。

<div class="g-signin2 social_signin" onclick="ClickLogin()" data-onsuccess="onSignIn"></div>
<script>
var clicked=false;//Global Variable
function ClickLogin()
{
    clicked=true;
}
function onSignIn(googleUser) {
    if (clicked) {
        profile = googleUser.getBasicProfile();    
    }
};
</script>
Run Code Online (Sandbox Code Playgroud)


Del*_*mas 1

于是终于想通了...

只需分配 onclick="gp_signOut();" 注销按钮

function gp_signOut() {
    var auth2 = gapi.auth2.getAuthInstance();
    auth2.signOut().then(function () {
        console.log('User signed out.');
    });
}
Run Code Online (Sandbox Code Playgroud)