我正在使用Angular和Firebase认证,有两个认证选项。
默认情况下,如果你 sign up with email and password
在认证用户列表中创建一个新用户。
this.afAuth.auth.createUserWithEmailAndPassword(email, password)
如果你然后 sign in with gmail
使用相同的电子邮件,firebase将供应商改为Google。
this.afAuth.auth.signInWithPopup(provider)
这样一来,这个邮箱的用户就不能再使用Google了。sign in using email and password
选项,因为他 signed in with google
.
有什么办法可以防止 sign in with google
如果用户已经 signed up with email and password
选项?也许在调用 signInWithPopup
方法,或者通过在该方法中设置一个参数到 GoogleAuthProvider
.
在firebase中有一个选项,允许每个邮件有多个账户,但我不想使用这个选项。
据我所知,这在预建的Firebase Auth UI中是不可能的,但你可以通过自定义的登录流程来实现你想要的东西。
每一个登录提供者都可以作为一个单独的方法,用电子邮件和密码登录也是如此。因此,你可以有一个用Google登录的按钮,只触发用Google弹出的登录,而另一个用电子邮件登录的按钮,直接用电子邮件登录,并且需要在某个地方输入电子邮件地址。
现在,如果用户最终同时使用这两种方式,账户将被链接起来,但在这种情况下,这并不是一件坏事,因为用户仍然可以选择是用Google登录还是通过电子邮件登录,如果他们在某一天选择一个,在另一天选择一个,或者在不同的设备上选择不同的方法,那就不是一个不同的账户,这将是混乱的。
回复:你对道格的评论。
是不是可以拒绝用google签到,如果邮箱是用邮箱提供商签到的?
你 可以 但我认为,如果用户故意点击谷歌的登录按钮,这种行为会让用户感到非常困惑。
请记住,不使用预制用户界面的一个缺点是,你还需要自己处理密码重置等问题。
我有一个解决方案,但是强制用户先用emailpassword登录。
你必须用.NET技术。
const googleAuthProvider = new firebase.auth.GoogleAuthProvider();
auth().currentUser.linkWithPopup(googleAuthProvider)
PS:不要忘了在登录方式上禁用每个邮箱多个账户的选项,我在用React做这个,我遇到了你提到的同样的问题,如果有人有正确的答案,请告诉我们。