使用Google Firebase身份验证的用户个人资料图片网址为null

时间:2019-07-07 12:41:54

标签: java android firebase firebase-authentication

我正在使用google firebase auth方法对用户进行身份验证,我正在使用firebase方法获取用户个人资料信息并将其保存在服务器上。 当我尝试在服务器上保存用户图像uri时,它显示为空值。

以下是我的代码:

FirebaseAuth fAuth = FirebaseAuth.getInstance();
FirebaseUser user = fAuth.getCurrentUser();

if(user != null){

     saveData();
}  

private void saveData(){

    final String uid = user.getUid();
    final String email = user.getEmail();
    final Uri profileImage  = user.getPhotoUrl();
    final String name = user.getDisplayName();

 RequestQueue requestQueue = Volley.newRequestQueue(BookForm.this);

 StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>(){

    @Override
        public void onResponse(String response) {

            if(response.equals("Successfully inserted")){

               Toast.makeText(getApplicationContext(),"Successful",Toast.LENGTH_SHORT.show();
            }
        }

  }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {

        NetworkResponse status = error.networkResponse;
            Toast.makeText(getApplicationContext(),"Error:"+status,Toast.LENGTH_SHORT).show();
        }
    }){

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            HashMap<String,String> map = new HashMap<>();

            map.put("userId",uid);
            map.put("email",email);
            map.put("name",name);
            map.put("profileImage", String.valueOf(profileImage));

            return map;
        }
    };

    requestQueue.add(stringRequest);
} 

这就是我向服务器发送数据的方式。

router.post('/addData', (req,res) => {

var data = {

    User_id: req.body.userId,
    Email:req.body.email,
    Profile_image:req.body.profileImage,
    Name: req.body.name
  };

  MongoClient.connect(dburl, {useNewUrlParser:true} ,(err,client) => {

          if(err){

            console.log("Error".red, +err);
          }
          else{

            var collect = client.db('my_db').collection('Example');

            collect.insertOne(data, (err,resp) =>{

                  if(err){

                    console.log("Error".red, +err);
                  }
                  else{

                    res.send("Successfully inserted");
                  }

                  client.close();
            });

        }

   });

});

请让我知道为什么图像uri保存到服务器后为什么显示为空。任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

不要求身份验证提供程序必须为您提供用户的图像URL。如果提供者没有提供者(可能是因为用户从未提供图像),那么您将得到null。您的代码应该能够处理这种情况。

请注意,getPhotoUrl()的API文档特别指出:

  

在创建帐户后,该字段将自动填充,如果   包含在signInWithCredential(AuthCredential)上的AuthCredential   这样的信息。