【问题标题】:Logout from google after login out from firebase从firebase注销后从google注销
【发布时间】:2018-10-23 12:19:18
【问题描述】:

我正在对 Google 帐户使用 Firebase 身份验证。登录过程正常,但我在注销时遇到问题。我成功地退出了火力基地,但不是从谷歌。这意味着用户仍然登录到谷歌。我怎样才能从他们两个中注销?

这是我的代码:

function auth() {   
    // Initialize Firebase;
    firebase.initializeApp(settings);
    var provider = new firebase.auth.GoogleAuthProvider();

    firebase.auth().signInWithPopup(provider).then(function(result) {
        // This gives you a Google Access Token. You can use it to access the Google API.
        var token = result.credential.accessToken;
        sessionStorage.setItem('tokenK', token);
        // The signed-in user info.
        var user = result.user;
        var tempName = user.displayName.split(" ");
        var fullName = tempName[0].charAt(0).toUpperCase() + tempName[0].toLowerCase().substring(1, tempName[0].length) + 
        " " + tempName[1].charAt(0).toUpperCase() +tempName[1].toLowerCase().substring(1, tempName[1].length);
        sessionStorage.setItem('displayName', fullName);
        sessionStorage.setItem('userName', user.email);
    }).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
        console.log(error);
    });
}

function logOut(){  
    firebase.initializeApp(settings);
    var dataJ = JSON.stringify(sessionStorage.getItem('userName'));
    var xhttp = new XMLHttpRequest();

    firebase.auth().signOut().then(function() {
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 204) {
                sessionStorage.removeItem('tokenK');
                sessionStorage.removeItem('displayName');
                sessionStorage.removeItem('userName');
                sessionStorage.removeItem('role');
                sessionStorage.removeItem('school');
                sessionStorage.removeItem('grade');
                window.open('index.html', '_self');                 
            }                   
        };
        xhttp.open("POST", settings.protocol + "://" + settings.host + ":" + settings.port + "/api/Login/SignOut", true);
        xhttp.setRequestHeader("Content-Type", "application/json");
        xhttp.setRequestHeader("Token", sessionStorage.getItem('tokenK'));  
        xhttp.send(dataJ);
    }).catch(function(error) {
        console.log(error);
    }); 
}

我看过这篇文章,在android上谈到了类似的问题,但找不到任何关于JS的东西。

【问题讨论】:

    标签: javascript firebase firebase-authentication google-authentication


    【解决方案1】:

    通常这是预期的行为。从 Firebase 退出与从 google 退出无关。用户需要明确退出谷歌。但是,如果您知道您的应用程序将在共享设备上使用,您可以执行以下操作:

    // Sign out from firebase.
    firebase.auth().signOut().then(function() {
      // Redirect to google sign out.
      window.location.assign('https://accounts.google.com/logout');
    }).catch(function(error) {
      // Error occurred.
    });
    

    【讨论】:

    • 谢谢,这确实可以将用户注销,但他很棒,但是.. 有没有办法留在我的网站上,并且在注销后不会将用户完全重定向到谷歌页面?
    • 这就是我最终用来实现目标的方法:document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
    【解决方案2】:

    mGoogleSignInClient.signOut().addOnCompleteListener(ClassName.this, new OnCompleteListener() { @Override 公共无效 onComplete(@NonNull 任务任务) { Toast.makeText(ClassName.this, "登出", Toast.LENGTH_SHORT).show(); } });

    【讨论】:

    猜你喜欢
    • 2017-12-31
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多