Firebase错误:photoURL字段必须是有效的URL

时间:2019-01-10 23:40:41

标签: javascript firebase firebase-authentication google-cloud-storage google-cloud-functions

我正在将图像上传到Firebase存储器,并希望将其图像保存为Firebase身份验证中的photoURL。但是,当我使用获得签名的URL后去上传图像URL时,会收到错误

  

错误:photoURL字段必须是有效的URL。

我知道该URL有效,因为我已经从控制台中检查了它。我试过使用decodeURI,甚至走到了firebase-admin-node的源代码,一直跟踪到名为auth-api-requests.ts的文件,该文件在第252行检查URL一个名为validator.isURL(request.photoUrl)的函数将我带到定义了该函数的文件validator.ts,该文件在此函数的第152行上定义了.isURL(),该检查是针对一串禁止字符进行的。我不想篡改Firebase源代码,但是找不到任何解决方案。对于一个Google函数.getSignedURL()的返回值用作另一个.updateUser({photoURL:}的参数,应该有一个更简单的解决方案,尤其是考虑到无法再从Google调用firebase.getDownloadURL()的情况下云功能节点。感谢您为解决此问题提供的任何帮助。

    var downloadURL = "";
   await admin.storage().bucket("gs://****firebase.appspot.com").file(storageRef).getSignedUrl({"action":"read","expires":Date.now() + 500*365*24*3600000}).then((value) => {
        console.log("value after requesting signed URL: " + JSON.stringify(value));
        downloadURL = value;
        return value;
    }).catch((error) => {
        console.log("error perfoming signed URL: " + error);
        return error;
    })


    const url = decodeURI(downloadURL)
    console.log("\nThe decodeURI url: " + url + "\n");

    await admin.auth().updateUser(userID,{photoURL:url}).then((user) => {
        console.log("User update ran a success: " + JSON.stringify(user));
        return true;
    }).catch((error) => {
        console.log("An error occured in getting the user: " + error);
        return error;
    });

1 个答案:

答案 0 :(得分:1)

硬编码用户photoURL(仅针对联合登录用户填充)不是一个好主意,因为它可能会更改。换句话说,Twitter用户可以更改其个人资料照片。 firebase.auth()在用户登录后为您提供新的用户元数据。

它只会增加维护开销,以保存这种类型的元数据-无需为此烦恼。