我想将显示名称添加到刚创建的用户。但是当我创建UserUithWithEmailAndPassword时,我的currentUser为null。怎么了?
var name = document.getElementById("name").value;
var username = document.getElementById("username").value;
var email = document.getElementById('email').value;
var password = document.getElementById('password').value;
// Sign in with email and pass.
// [START createwithemail]
firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// [START_EXCLUDE]
if (errorCode == 'auth/weak-password') {
alert('The password is too weak.');
} else {
console.error(error);
}
// [END_EXCLUDE]
});
// [END createwithemail]
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: username
}).then(function() {
// Update successful.
}, function(error) {
// An error happened.
});
document.getElementById("submitButton").innerHTML = "Loading...";
$("#submitButton").css("background-color", "#efefef");
$("#submitButton").css("cursor", "init");
$("#submitButton").css("color", "#aaa");
registerUserToDB(username, name, email);
console.log("shouldhave worked");
答案 0 :(得分:24)
createUserWithEmailAndPassword
是一个异步调用,就像Firebase中的几乎所有其他函数一样。您创建用户(最有可能成功),但在您尝试抓住currentUser
后立即创建。几乎在每种情况下,您都会尝试在Firebase创建用户之前获取currentUser
。
重写内部回调:
firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
// [END createwithemail]
// callSomeFunction(); Optional
// var user = firebase.auth().currentUser;
user.updateProfile({
displayName: username
}).then(function() {
// Update successful.
}, function(error) {
// An error happened.
});
}, function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// [START_EXCLUDE]
if (errorCode == 'auth/weak-password') {
alert('The password is too weak.');
} else {
console.error(error);
}
// [END_EXCLUDE]
});
成功时将调用 .then
,并在出错时调用function(error)
。您希望在用户创建成功后设置用户。
有些人不喜欢嵌套的回调,所以你可以创建一个获取当前用户的函数,并在成功时调用该函数。
文档:
答案 1 :(得分:1)
你必须这样做。
import {AngularFireAuth} from '@angular/fire/auth';
import { auth } from 'firebase';
constructor(private auth: AngularFireAuth) {}
signup(username: string, email: string, password: string) {
this.auth.auth.createUserWithEmailAndPassword(email, password)
.then((user: auth.UserCredential) => {
user.user.updateProfile({
displayName: username
});
})
}
如果你使用 Angular,那么你可以使用依赖注入将 AUTH 实例注入到构造函数中,然后你访问 AUTH 服务(this.auth.Auth),并使用 createUserWithEmailAndPassword() 方法创建你的帐户。账户创建成功后,返回Promise
UserCredential: { additionalUserInfo?: AdditionalUserInfo | null; credential: AuthCredential | null; operationType?: string | null; user: User | null }
如您所见,UserCredential 实例中有许多属性,其中之一是 USER(用户:User | null)。该属性包含用户的所有信息。现在您可以访问 firebase.User 的方法。负责更新用户配置文件的方法是 updateProfile()。它具有 displayName、PhotoURL 属性。现在您可以像这样更新 userProfile。 user.user.updateProfile({ displayName: NAME })。请记住,您必须更新括号 ( {} ) 内的属性,因为 updateProfile 支持 JavaScript 对象参数。这个对象有两个属性,分别是 displayName 和 photoURL。
updateProfile ( profile : { displayName ?: string | null ; photoURL ?: string | null } ) : Promise < void >
https://firebase.google.com/docs/reference/js/firebase.auth.Auth https://firebase.google.com/docs/reference/js/firebase.auth#usercredential https://firebase.google.com/docs/auth/web/password-auth#create_a_password-based_account https://firebase.google.com/docs/reference/js/firebase.User#updateprofile