Firebase extraUserInfo.isNewUser 始终返回 false

hes*_*wky 4 firebase typescript ionic-framework firebase-authentication angularfire2

我将 ionic 4 与 firebase/angularfire2 结合使用并使用signinwithemeailandpassword()方法进行身份验证,因此我需要在注册后检查用户第一次登录的时间,因此我发现 firebase 提供了该选项isNewUser

createUserWithEmailAndPassword()因此,使用isNewUser创建帐户时equal应该true是正常的!signinwithemeailandpassword()但是,无论是第一次登录还是第一次登录,登录时总是返回 false!

这是登录方法的代码:

 async login(form: NgForm) {

// checking if login is valid
if (form.invalid)
  return this.statusMessage.message('Validation error!');

console.log(this.user);

try {

  const results = await this._afAuth.auth.signInWithEmailAndPassword(this.user.email, this.user.password).then(
    user => console.log(user.additionalUserInfo.isNewUser)

  );
  // console.log(results);

} catch (error) {
  switch (error.code) {
    case "auth/user-not-found":
      this.statusMessage.message("Your email address is wrong! please try again");
      break;

    case "auth/invalid-email":
      this.statusMessage.message("You have enterd invalid email address");
      break;

    case "auth/wrong-password":
      this.statusMessage.message('Password you have enterd is wrong');
      break;

    default:
      console.dir(error);
      this.statusMessage.message('Something wen wrong! please try again later');
      break;
  }

}
Run Code Online (Sandbox Code Playgroud)

注册码:

async register(form: NgForm) {

    // checking for form validation
    if (form.invalid) return this.statusMessage.message('Validation error!');

    console.log(this.user);

    try {
      await this.afAuth.auth.createUserWithEmailAndPassword(this.user.email, this.user.password).then(
        user => console.log(user)

      );
    } catch (error) {
      this.statusMessage.message('Somthing went wrong!, please try again later.');
    }

  }

}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ade 7

它是假的,因为只有在他们第一次登录时才为真。当您调用客户端时,createUserWithEmailAndPassword()客户端将以该用户身份登录。未来的登录将不再将用户视为新用户。

从文档中:

成功创建用户帐户后,该用户也将登录到您的应用程序。

正常登录的唯一情况isNewUser是您在 Firebase 控制台中或使用 Firebase Admin SDK 创建帐户。

  • @heshamshawky 只需在他们创建帐户时重定向他们,他们就已经登录了,无需在他们刚刚注册后让他们登录。 (3认同)
  • 迈克尔的回答很好!我完全没有意识到问题出在随后的登录上。@heshamshawky:典型的处理方法是在用户登录后检测您是否拥有完整的个人资料。如果您没有完整的个人资料,则将他们重定向到“完成您的个人资料”页面,否则您将重定向您的主要活动。 (2认同)