如果用户已经用电子邮箱和密码登录,防止用谷歌登录。

问题描述 投票:0回答:1

我正在使用Angular和Firebase认证,有两个认证选项。

  • 使用电子邮件和密码
  • 与谷歌

默认情况下,如果你 sign up with email and password在认证用户列表中创建一个新用户。

this.afAuth.auth.createUserWithEmailAndPassword(email, password)

Sign up with email and password

如果你然后 sign in with gmail 使用相同的电子邮件,firebase将供应商改为Google。

this.afAuth.auth.signInWithPopup(provider)

Sign in with google

这样一来,这个邮箱的用户就不能再使用Google了。sign in using email and password 选项,因为他 signed in with google.

有什么办法可以防止 sign in with google 如果用户已经 signed up with email and password 选项?也许在调用 signInWithPopup 方法,或者通过在该方法中设置一个参数到 GoogleAuthProvider.

在firebase中有一个选项,允许每个邮件有多个账户,但我不想使用这个选项。

multiple accounts per email

angular firebase firebase-authentication angularfire
1个回答
0
投票

据我所知,这在预建的Firebase Auth UI中是不可能的,但你可以通过自定义的登录流程来实现你想要的东西。

每一个登录提供者都可以作为一个单独的方法,用电子邮件和密码登录也是如此。因此,你可以有一个用Google登录的按钮,只触发用Google弹出的登录,而另一个用电子邮件登录的按钮,直接用电子邮件登录,并且需要在某个地方输入电子邮件地址。

现在,如果用户最终同时使用这两种方式,账户将被链接起来,但在这种情况下,这并不是一件坏事,因为用户仍然可以选择是用Google登录还是通过电子邮件登录,如果他们在某一天选择一个,在另一天选择一个,或者在不同的设备上选择不同的方法,那就不是一个不同的账户,这将是混乱的。

回复:你对道格的评论。

是不是可以拒绝用google签到,如果邮箱是用邮箱提供商签到的?

可以 但我认为,如果用户故意点击谷歌的登录按钮,这种行为会让用户感到非常困惑。

请记住,不使用预制用户界面的一个缺点是,你还需要自己处理密码重置等问题。


0
投票

我有一个解决方案,但是强制用户先用emailpassword登录。

你必须用.NET技术。

const googleAuthProvider = new firebase.auth.GoogleAuthProvider();
auth().currentUser.linkWithPopup(googleAuthProvider)

PS:不要忘了在登录方式上禁用每个邮箱多个账户的选项,我在用React做这个,我遇到了你提到的同样的问题,如果有人有正确的答案,请告诉我们。

© www.soinside.com 2019 - 2024. All rights reserved.