gpt4 book ai didi

javascript - 当用户注销我的 Firebase 应用程序时,为什么它不也从身份验证提供商处注销(例如 Google)?

转载 作者:行者123 更新时间:2023-12-01 22:07:40 31 4
gpt4 key购买 nike

我使用 Google 作为身份验证提供商来登录我的应用。我的代码调用 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);
});

最佳答案

主要答案:

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

仅当您的浏览器缓存中只有单个 Google 登录信息时,才会出现您遇到的问题。如果是这种情况,下次您使用 Firebase 身份验证登录时,它会自动重用相同的 Google 凭据(因为您没有退出 Google,而且确实如此),以便用户通过更少的鼠标点击来更快地登录.

IOW,对于过去使用 >1 个 Google/Gmail 帐户登录的用户来说,这不是问题 - 这些用户将看到预期的帐户选择器对话框。如果您只有一个可用的 Google 登录信息并且想要查看帐户选择器,则需要设置 the prompt custom parameterselect_account 正如 @Shib 所说:

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

要详细了解如何通过 Firebase 身份验证进行 Google 登录,请参阅 this page 。这是 post它更详细地描述了这种行为。以上,@linasmnew asked @bojeil为什么他们评论说这是默认/预期行为(不退出身份验证提供程序),所以 here is a thread提供解释。

第 2 部分(FirebaseUI library 仅使用):

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

开发人员不像上面的主要答案那样实例化特定的身份验证提供程序类,而是 list out the supported provider IDs在他们的 signInOptions 配置中(特别是步骤 3)。 (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。)当这个bug(嗯,“功能”)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
],
. . .

关于javascript - 当用户注销我的 Firebase 应用程序时,为什么它不也从身份验证提供商处注销(例如 Google)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42312758/

31 4 0
文章推荐: pycharm - 为什么 PyCharm 上的“运行”选项被禁用?
文章推荐: java - 如何从打开的 jdk docker 镜像运行 jar 文件
文章推荐: java - 如何将选定的值从