【问题标题】:Firebase Anonymous User once upgradedFirebase 匿名用户一旦升级
【发布时间】:2020-07-21 09:48:43
【问题描述】:

我正在实施一个工作流程,其中使用我的应用的每个用户都是匿名用户,直到他们登录/注册(电子邮件或 Google)。

注册,很简单:我使用linkWithPopup

但是,我在用户登录 in 时遇到了一些问题:我尝试链接它们,如果我收到 auth/credential-already-in-use 错误(如果用户升级一次,注销然后尝试再次登录),我让他们登录。

firebase.auth().currentUser.linkWithPopup(provider).then(function (result) {
        var token = result.credential.accessToken;
        // The signed-in user info.
        var user = result.user;
        // ...
    }).catch(function (error) {
        // Handle Errors here.
        var errorCode = error.code;
        if (errorCode === 'auth/credential-already-in-use') {
            return firebase.auth().signInWithCredential(error.credential);
        }
    }).then((result) => {
        return dispatch(loadContent(result.user.uid))
    }).then(() => {
        history.push('/');
    });

上面的代码运行良好,而且比我自己做这一切更容易。

但是,如果用户登录,我如何删除创建和孤立的匿名用户?

我试图引用旧的无用匿名用户,并在用户登录后将其删除如果用户可以删除另一个,那将是一个很大的安全漏洞......

我对 Firebase 生态系统不是很熟悉,应该如何处理?我需要使用Firebase Cloud FunctionFirebase Admin SDK 的组合,还是有解决此问题的标准方法?

【问题讨论】:

  • 我认为这里没有任何“标准”。您当然可以使用任何您喜欢的方式使用 admin SDK 来删除该帐户。您不必使用 Cloud Functions,但如果您觉得它有帮助,您可以使用。

标签: javascript firebase firebase-authentication


【解决方案1】:

这很简单。即使用户不是当前用户,用户的 API 也会继续工作。

const anonymousUser = firebase.auth().currentUser;
firebase.auth().currentUser.linkWithPopup(provider)
  .then(function (result) {
    var token = result.credential.accessToken;
    // The signed-in user info.
    var user = result.user;
    // ...
  }).catch(function (error) {
    // Handle Errors here.
    var errorCode = error.code;
    if (errorCode === 'auth/credential-already-in-use') {
        return firebase.auth().signInWithCredential(error.credential);
    }
  }).then((result) => {
    if (anonymousUser.uid !== result.user.uid) {
      return anonymousUser.delete()
        .then(() => {
          return result;
        });
    }
    return result;
  }).then((result) => {
    return dispatch(loadContent(result.user.uid))
  }).then(() => {
    history.push('/');
  });

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2019-06-29
    • 2016-10-20
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多