javascript - Angular 8 /Firebase:使用电子邮件和密码创建用户时如何设置 displayName?
问题描述
在阅读了这么多帖子和空的(或不是?)解决方案之后,我认为最好的办法是自己发布。所以我的目标只是获取用户的显示名称,以便在帖子列表或其他任何内容中,使用 uid 的作者身份看起来并不难看......这是我发现与问题相关的内容:
注册反应形式,后来在 onInit 上调用:
createForm() {
this.registerForm = this.fb.group(
{
name: ['', Validators.required],
email: ["", [Validators.required]],
password: [null, [Validators.required, Validators.minLength(5)]],
retype: ["", Validators.required]
},
{
validator: PasswordValidators.passwordsShouldMatch
}
);
}
提交方法:
onSubmit() {
if (this.registerForm.invalid) return;
this.registered = true
this.authService.registerUser(this.email.value, this.password.value).then(data=>{
console.log(data)
})
}
authService 调用 uid 和 register 方法:
constructor( private afAuth: AngularFireAuth, private router: Router) {
this.afAuth.authState.subscribe(user=>{
this.userId = user.uid;
})
}
registerUser(email:string, password:string) {
return this.afAuth.auth.createUserWithEmailAndPassword(email, password)
.then((result) => {
this.router.navigate(['/login']);
console.log(result.user)
}).catch((error) => {
window.alert(error.message)
})
}
当记录这一行时this.afAuth.authState.subscribe(user=>{
this.userId = user.uid;
,实际上是记录用户,我可以看到整个对象和显示名称,但由于注册方法只接受 2 个参数,电子邮件和传递,我该如何解决这个问题?我已经尝试过处理 updateprofile 的方法,但我遇到了一个错误……有什么解决方案吗?谢谢
解决方案
如果您想设置用户帐户的显示名称,您将无法在使用 createUserWithEmailAndPassword 创建帐户时执行此操作。您必须对返回的用户对象执行对updateProfile()的后续调用。
result.user.updateProfile({
displayName: ...
})
.then(...)
.catch(...)
您显然必须将调用中的名称传递给registerUser()
.
推荐阅读
- azure-devops - 如何使用 Azure DevOps REST Api 获取非机密构建参数?
- python - 为什么在 OpenCV 2x 中estimateAffine3D 的结果如此不同。与 3x/4x 相比?
- python - AttributeError:“int”对象没有属性“fitness”。,随机通用采样--python
- javascript - wifi突然关闭时如何检测firebase中的onDisconnected事件?
- installation - 即使安装了 flatpak 也无法创建沙箱
- php - 设置 laravel 雄辩查询的优先级(使用 mongodb)
- ghostscript - ghostscript - 我在哪里可以找到最新版本下载中的 gsprint32.exe / gsprint64.exe 文件?
- typescript - 检查类型而不推断检查类型
- c++ - 为什么 b[2] 是假的?
- jquery - 以红色字体显示 Datepicker 选择的日期并隐藏 p 元素中的文本