Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用createUserWithEmailAndPassword时添加displayName_Javascript_Firebase - Fatal编程技术网

Javascript 使用createUserWithEmailAndPassword时添加displayName

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

我想将显示名称添加到刚刚创建的用户。但是当我用email和password创建users时,它表示我的当前用户为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");

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()方法创建帐户。成功创建帐户后,它将返回Promise。因为它被包装在一个承诺中,所以您必须使用async、await或then()来访问UserCredential类型的值。UserCredential的接口如下所示

UserCredential: { 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({…})})