Javascript 当用户注销我的Firebase应用程序时,为什么它不也从身份验证提供商(比如谷歌)注销呢?
我正在使用谷歌作为身份验证提供商登录我的应用程序。我的代码调用Firebase注销方法,该方法重定向到登录页面,但当用户再次单击Google登录按钮时,它会自动验证并登录应用程序,而不会提示用户。以下是登录的代码:Javascript 当用户注销我的Firebase应用程序时,为什么它不也从身份验证提供商(比如谷歌)注销呢?,javascript,firebase,firebase-authentication,firebase-security,Javascript,Firebase,Firebase Authentication,Firebase Security,我正在使用谷歌作为身份验证提供商登录我的应用程序。我的代码调用Firebase注销方法,该方法重定向到登录页面,但当用户再次单击Google登录按钮时,它会自动验证并登录应用程序,而不会提示用户。以下是登录的代码: $('#GooglePluseLogin').click(function (e) { showLoaderPF(true); if (!firebase.auth().currentUser) { var provider
$('#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);
});
主要答覆:
提供的答案基本上是正确的,但没有为每个来到这里的人提供足够的上下文,所以让我详细说明一下。当你的代码调用firebase.auth.signOut时,你从你的应用程序中注销firebase,而不是在下面的链接中注销auth提供者,因为你真的不想在你的其他选项卡中注销你的Gmail和其他Google,对吗
只有当浏览器缓存中只有一个Google登录可用时,才会出现您遇到的问题。如果是这种情况,下次使用Firebase auth登录时,它将自动重新使用相同的Google凭据,因为您没有注销Google,而且,它还允许用户以更少的鼠标点击来更快地登录
注意,这对于过去使用超过1个Google/Gmail帐户登录的用户来说不是问题-这些用户将获得预期的帐户选择器对话框。如果您只有一个可用的Google登录名,并且希望查看帐户选取器,则需要设置为选择_account as@Shib noted:
var provider = new Firebase.auth.GoogleAuthProvider();
provider.setCustomParameters({
prompt: 'select_account'
});
要了解有关从Firebase auth进行Google登录的更多信息,请参阅。下面是一个更详细地描述这种行为的示例。上面,为什么他们评论说,不注销身份验证提供程序是默认/预期行为,因此提供了该解释
第2部分仅用于:
如果您使用这个位于Firebase auth之上的便利库,如果您有一个Google凭据,您也会遇到这个问题,但解决问题的方法可能不那么简单。此库的目的是提供一个可减少开发人员时间并提供一致用户体验的方法
开发人员没有像上面的主要答案那样实例化一个特定的auth提供者类,而是在他们的signInOptions配置中指定了第3步。使用FirebaseUI,这就是我遇到这个问题的原因
例如,如果您决定只使用Google和email auth,这些选项如下所示:
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
],
. . .
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
],
. . .
这正是AppEngine示例所做的,并且。此FirebaseUI JS也可以是。当出现此错误时,请在此处添加提示自定义参数,以强制帐户选择器显示如下:
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
],
. . .
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
],
. . .
现在还不清楚这里有什么问题。问题是您没有从Google提供商处注销,而只是从Firebase注销?如果是这样,这是意料之中的。我也有这个问题。从Firebase注销并不意味着从Google或类似的网站注销。下一次登录尝试将使用相同的凭据,用户无法更改用于登录的帐户,并且密码以某种方式存储。注销按钮应该也会忘记以前使用的密码,对吗?我使用GIDSignIn.sharedInstance.signOut暂时解决了我的问题,因为我的应用程序当前使用Google auth,它可以让我在下次尝试时选择另一个帐户,但是SFSafariViewController?在幕后记住密码。。。我猜用户可能需要在“设置”>“Safari”等中删除某些内容才能删除密码。嗨@Jonny,GIDSignIn object是什么?@Talha我使用iOS框架。对不起,我知道你不是。我还不太习惯Firebase系统,但也许iOS框架只是与web工具功能相同/相似的包装器,因此我们面临着同样的问题。谢谢,@wescpyHappy提供帮助。我也不知道答案,不得不到处挖掘,然后实验得出公布的解决方案。我觉得这个问题可能比ppl想象的更普遍!