开发者问题收集

Firebase:User.photoUrl 转字符串

2017-07-29
11498

我试图将所有用户的个人资料照片存储在实时数据库中,但遇到了一个问题。

尝试使用此代码上传 PhotoUrl 时,会出现此错误。

代码:

var user = firebase.auth().currentUser;

user.updateProfile({

  // Here, "name" and "imgUrl" are parameters of parent function.
  // I don't think this is the reason, but if it helps,
  // "imgUrl" always come from a <img> src.
  displayName: name,
  photoUrl: imgUrl

}).then(function(){

  // Here is where I try to upload all to the database
  firebase.database().ref("/Usuarios/" + user.uid).set({
    "email": email,
    "name": name,
    "photoUri": user.photoUrl, // This is where I think the problem originates.
    "uid": user.uid  // This calls user again, and it works perfectly.
  });

});

错误:

Uncaught Error: Firebase.set failed: First argument contains undefined in property 'Usuarios.kD1tD1NAmsaGiW0zj6lFz9GDWro1.photoUri'.

当我执行 alert(user.photoUrl) 时,它显示为“未定义”。

我首先想到的是它无法保存在数据库中,因为它不是字符串,所以我尝试从中调用 toString(),但我不能。

toString() 错误:

Uncaught TypeError: Cannot read property 'toString' of undefined

那么,如何在 Firebase 中保存来自用户的 photoUrl(作为字符串)数据库?

提前致谢。

2个回答

大多数情况下,我尝试不采用这种解决方法,最终 将照片上传到 Firebase 存储,然后将 User.photoURL “photoUri” DB 字段设置为上传图像的 url

user = firebase.auth().currentUser;
avatarStgRef = firebase.storage().ref("Usuarios/" + user.uid + "/avatar.jpg");

// imgFile the Photo File.
avatarStgRef.put(imgFile).then(function(snapshot){
    snapshot.ref.getDownloadURL().then(function(url){  // Now I can use url
        user.updateProfile({
            photoURL: url       // <- URL from uploaded photo.
        }).then(function(){
            firebase.database().ref("Usuarios/" + user.uid).set({
              "photoUri": url   // <- URL from uploaded photo.
            });
        });
    });
});
thecalin
2017-07-31

正如您在文档中所见, photoUrl 是一个可空字符串。

因此,您必须在使用该值之前测试它是否已设置。

例如:

if (typeof user.photoUrl != 'undefined') {
    // Use user.photoUrl
}
Pipiks
2017-07-29