我正在使用谷歌身份验证提供程序登录我的应用程序,我调用了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);
});
答案 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