【问题标题】:Firebase - Reference.set failed: First argument contains undefined in property 'users.undefined.uid'Firebase - Reference.set 失败:第一个参数在属性“users.undefined.uid”中包含未定义
【发布时间】:2019-04-01 02:59:40
【问题描述】:

我目前正在通过使用名为“使用 Angular 5 和 Firebase 的动手全栈开发”这本书来学习 Angular。我已经按照这本书进行操作,但是当我点击注册按钮时目前遇到了一个错误。但是,用于注册的电子邮件和密码将显示在“身份验证”选项卡中。

我知道 userInfo.uid 没有返回 uid,但我不知道为什么,因为我完全按照这本书的教导。我什至在网上查看了源代码,但似乎不知道为什么。

signup.component.ts

onSignup(signupFormData): void {
    this.authService.signup(signupFormData.value.email, signupFormData.value.password).then((userInfo) => {
        // Register the new user
        const user: User = new User(signupFormData.value.email,
            signupFormData.value.name, signupFormData.value.mobile, userInfo.uid, 0, '');
        this.writeNewUser(user);
        this.navigateToUserProfile();
    }).catch((error) => {
        this.showError = true;
        this.errorMessage = error.message;
    });
}

private writeNewUser(user: User): void {
    this.userService.addUser(user);
}

user.service.ts

public addUser(user: User): void {
    this.fireDb.object(`${USERS_CHILD}/${user.uid}`).set(user);
}

【问题讨论】:

  • 你有没有 console.log(signupFormData.value),我猜未定义的电子邮件或密码,firebase 无法插入未定义的电子邮件地址
  • @MH-Li 不,电子邮件和密码都没有问题。我可以看到这两个值
  • 你能把代码贴在 writeNewUser 函数上吗?那边发生了什么事。并且请执行console.log('userInfo.uid',userInfo.uid) 和console.log('user', user), this.writeNewUser(user); 之前的行
  • @MH-Li 我已经编辑了我的帖子并添加了所需的代码
  • 你使用firebase实时数据库还是firestore?

标签: angular firebase


【解决方案1】:

在 addUser 函数中,如果您使用 Firebase 实时数据库,您可以像这样插入新用户:

const userObject ={"eamil":email, "createDate":'xxxx',....}
admin.database().ref('/users').child(uid).set(userObject)

如果您使用这样的 firestore 更改代码:

firestore.collection('users').doc(userId).set(userObject);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2016-04-14
    • 2018-08-08
    相关资源
    最近更新 更多