来自Firebase的SignOut还需要来自身份验证提供商的SignOut,例如Google

时间:2017-02-18 08:08:32

标签: javascript firebase firebase-authentication firebase-security

我正在使用谷歌身份验证提供程序登录我的应用程序,我调用了firebase登出方法并将其重定向到登录页面,但当用户再次单击Google登录按钮时,它会自动进行身份验证并登录到应用程序中。 这是登录的代码

 $('#GooglePluseLogin').click(function (e) {
        showLoaderPF(true);
        if (!firebase.auth().currentUser) {

            var provider = new firebase.auth.GoogleAuthProvider();
            provider.addScope('https://www.googleapis.com/auth/plus.login');
            firebase.auth().signInWithRedirect(provider);


        } else {
            firebase.auth().signOut();
            showLoaderPF(true);
        }
    });

并且,这是注销的代码

firebase.auth().signOut().then(function () {
            debugger;
            localStorage.clear();
            deleteAllCookies();

           // firebase.auth().unauth();

            window.location.href = "index.html";

        }, function (error) {
            showLoaderPF(false);
            console.error('Sign Out Error', error);
        });

2 个答案:

答案 0 :(得分:1)

主要答案

@Shib提供的答案基本上是正确的,但没有为到达这里的每个人提供足够的背景信息,所以让我详细说明一下。当您的代码调用firebase.auth().signOut()时,您从应用程序中注销了Firebase,但没有整体上从身份验证提供程序中注销(更多信息在下面的链接中),因为您真的不想从您的Gmail和其他Google中注销。其他标签,对不对?

仅当您的浏览器缓存中只有单个 Google登录名时,才会出现您遇到的问题。如果是这种情况,则下次您使用Firebase身份验证登录时,它将自动重用相同的Google凭据(因为您也没有退出Google,也是这样),以使用户能够以更少的鼠标点击次数更快地登录

IOW,对于过去使用1个以上Google / Gmail帐户登录的用户来说,这不是一个问题-这些用户将获得预期的帐户选择对话框。如果您只有一个Google登录名,并且想要想要查看帐户选择器,则需要将the prompt custom parameter设置为select_account,如@Shib所述:

var provider = new Firebase.auth.GoogleAuthProvider();
  provider.setCustomParameters({
    prompt: 'select_account'
  });

要了解有关通过Firebase身份验证进行Google登录的更多信息,请参阅this page。这是post,它更详细地描述了这种行为。上方,@linasmnew asked @bojeil为何评论(未注销auth提供者)这是默认/预期的行为,因此here is a thread提供了 that < / em>说明。

PART 2 (仅FirebaseUI library使用):

如果您使用的是便捷库(位于Firebase身份验证上方),如果您只有一个Google凭据,也会遇到此问题,但是解决该问题可能并不那么简单。该库的目的是提供一个reusable prebuilt UI letting users choose from various auth providers,以减少开发人员时间并提供一致的用户体验。

开发人员list out the supported provider IDs在其signInOptions配置中(特别是步骤3),而不是像上面的主要答案中那样实例化特定的auth提供程序类。 (Python 3 Google App Engine "building an app" Quickstart example使用FirebaseUI,这是遇到此问题的地方。)

例如,如果您决定仅使用Google和电子邮件身份验证,则这些选项如下所示:

signInOptions: [
  firebase.auth.GoogleAuthProvider.PROVIDER_ID,
  firebase.auth.EmailAuthProvider.PROVIDER_ID,
  //firebase.auth.FacebookAuthProvider.PROVIDER_ID,
  //firebase.auth.TwitterAuthProvider.PROVIDER_ID,
  //firebase.auth.GithubAuthProvider.PROVIDER_ID,
  //firebase.auth.PhoneAuthProvider.PROVIDER_ID
],
            . . .

这正是App Engine示例和here's the code所做的。 (此FirebaseUI JS也可以是embedded in HTML。)当此错误(“功能”(um,“ feature”))rears its undesired head在此处时,请添加prompt自定义参数以强制帐户选择器显示如下:

signInOptions: [
  //firebase.auth.GoogleAuthProvider.PROVIDER_ID,
  { provider: firebase.auth.GoogleAuthProvider.PROVIDER_ID,
      customParameters: { prompt: 'select_account' },
  }
  firebase.auth.EmailAuthProvider.PROVIDER_ID,
  //firebase.auth.FacebookAuthProvider.PROVIDER_ID,
  //firebase.auth.TwitterAuthProvider.PROVIDER_ID,
  //firebase.auth.GithubAuthProvider.PROVIDER_ID,
  //firebase.auth.PhoneAuthProvider.PROVIDER_ID
],
            . . .

答案 1 :(得分:0)

get_locs