登录后从自定义管理网站在Firebase Auth中创建帐户

时间:2019-11-19 13:16:08

标签: javascript firebase firebase-authentication

我正在使用Angular 8和AngularFire做一个Web应用程序。

在我的自定义网站上,具有管理员权限的用户可以为其他人创建帐户。

为此,我已阅读到以下信息:

  

创建第二个身份验证参考,并使用该参考来创建用户。   原因:如果我们使用默认的身份验证引用,则在createUserWithEmailAndPassword()方法创建新用户时,   用户会自动登录,从而覆盖我们当前的会话(   登录我们的自定义网站上的用户)。

我尝试过:

  async createUserWithEmailAndPassword(email: string, password: string): Promise<string> {
    // 1. A new auth session
    let secondaryApp = firebase.initializeApp(environment.firebaseConfig, 'Secondary');
    // 2. Create the account
    const user = await secondaryApp.auth().createUserWithEmailAndPassword(email, password);
    // 3. Sign out the user created
    await secondaryApp.auth().signOut();
    // 4. Make the auth session null to ensure that it's deleted
    secondaryApp = null;

    if (user.user.uid) {
      // User created
      return Promise.resolve(user.user.uid);
    } else {
      // Error
      return Promise.reject();
    }
  }

收到错误(在我第二次调用该方法时发生):

  

FirebaseError:Firebase:名为“ Secondary”的Firebase应用已存在   (应用程序/重复应用程序)。

我的想法/步骤是:

  1. 创建一个新的身份验证会话。
  2. 创建用户。
  3. 注销创建的用户。
  4. 删除创建的身份验证会话。
  5. 一切准备就绪,随时可以创建新帐户。

我做错了什么?

我的目标是在登录自定义网站时能够创建帐户。

1 个答案:

答案 0 :(得分:0)

一个有根据的猜测是,您第二次调用自己的createUserWithEmailAndPassword方法时会收到该错误消息。这样做的原因是您在上一个调用中已经创建了一个名为Secondary的应用,并且没有删除该应用。

最简单的解决方案是在创建Secondary应用之前先检查它是否存在。

let secondaryApp = firebase.app("Secondary");
if (!secondaryApp) {
  secondaryApp = firebase.initializeApp(environment.firebaseConfig, 'Secondary');
}