Javascript 使用createUserWithEmailAndPassword时添加displayName
我想将显示名称添加到刚刚创建的用户。但是当我用email和password创建users时,它表示我的当前用户为null。有什么问题吗Javascript 使用createUserWithEmailAndPassword时添加displayName,javascript,firebase,Javascript,Firebase,我想将显示名称添加到刚刚创建的用户。但是当我用email和password创建users时,它表示我的当前用户为null。有什么问题吗 var name = document.getElementById("name").value; var username = document.getElementById("username").value; var email = document.getElementById('email').value; var password = documen
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");
createUserWithEmailAndPassword
与Firebase中的几乎所有其他函数一样,是一个异步调用。您创建了用户(很可能成功),但在尝试抓取当前用户后立即创建。几乎在任何情况下,您都会在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]
});
。然后在成功时调用
,在出错时调用
函数(错误)。您希望在用户创建成功后设置用户
有些人不喜欢嵌套回调,因此您可以创建一个获取当前用户的函数,并在成功后调用该函数
文件:
你必须这样做
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()方法创建帐户。成功创建帐户后,它将返回PromiseUserCredential: { additionalUserInfo?: AdditionalUserInfo | null; credential: AuthCredential | null; operationType?: string | null; user: User | null }
如您所见,UserCredential实例中有许多属性,其中一个是USER(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 >
updateProfile(配置文件:{displayName?:string | null;photoURL?:string | null}):Promise
使用.then(函数(){…})确定提示;很好,很有效,但是用户updateProfile没有。。。如果我在currentuser上运行检查,并且无法使.set函数用于数据库,则它会将displayName显示为null。。。。有什么提示吗?试试我的新答案,
user
被传递到success回调中,而不是error
,并且user
被用来设置displayName
好的,所以我试过了,当你得到[Object Object]时,会发生什么情况。。。然后调用updateProfile
函数。。。当我向错误消息发出警报时,它是这样说的:错误:发生了网络错误(如超时、连接中断或无法访问主机)。你知道了吗?我认为这个承诺传递了一个UserCredential实例,所以你需要做。然后((userCred)=>{userCred.user.updateProfile({…})})