首页 文章

使用新提供商(Google)登录的Firebase会删除以前的提供商(密码)

提问于
浏览
8

我正在使用Firebase(v3)Auth登录,我遇到了这个问题:

  • 用户最初使用电子邮件和密码注册 .

  • 退出 .

  • 稍后,使用Google登录 .

我希望错误抱怨电子邮件地址用于其他帐户,然后要求用户键入密码然后链接帐户,而Firebase默认删除电子邮件/密码登录方法并返回成功消息 .

Google认证代码:

var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(
    result => {
        console.log("federated (google) result", result);
    },
    error => {
        console.log("federated (google) error", error);
    }
);

电子邮件和密码验证代码:

// Login:
firebase.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then(
    ok => {
        console.log("email/pass sign in success", ok);
    },
    error => {
        console.log("email/pass sign in error", error);
    }
)

// Register:
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then(
    ok => {
        console.log("Register OK", ok);
    },
    error => {
        console.log("Register error", error);
    }
)

我看到in the guide帐户链接是通过首先使用他们当前的提供者/方法签署用户并且然后为新的身份验证方法/提供者请求凭证/获取令牌来完成的 . 在我的情况下,我不知道他们是否有其他身份验证提供程序,直到太晚(Firebase覆盖它) .

在Firebase覆盖现有帐户的详细信息并要求用户键入密码并链接帐户之前,是否有办法检测电子邮件?或者,更好的是,如果帐户已经与Google登录并且电子邮件地址匹配,则会自动关联帐户?

1 回答

  • 6

    我想到了 . Firebase的行为应该如此,这不是技术/编码问题 . 这更像是一个文档问题 .

    当用户使用电子邮件和密码注册时,注销并使用其他方法(之前未使用过)登录,可能会发生以下两种情况:

    • 如果确认电子邮件,则在您使用新提供商登录时会记住电子邮件/密码凭据(我的问题中的所需结果) .

    要么

    • 如果电子邮件未经确认,则会更新用户,以便删除电子邮件/密码凭据并保留新的登录方法 . 像 displayName 这样的用户详细信息不会自动更新 .

相关问题