如何使用http POST方法从Flutter应用中向restapi发送当前用户(使用该应用的人)的Firebase Id token?

问题描述 投票:0回答:1

我已经创建了一个应用程序,使用flutter的UI和Restapi在nodejs作为后端。现在,我想通过发送当前用户的firebase Id token来验证用firebase认证注册的用户。为了做到这一点,我使用HTTP Post方法发送id token。但是得到了一个错误。

示例代码。

        import 'package:http/http.dart' as http;

    FirebaseUser user = await FirebaseAuth.instance.currentUser();
       if(user!=null){
  Future<IdTokenResult> idtoken = user.getIdToken();
    }
 http.Response response = await http.post("https://www.something.com/something/something",
                              body:jsonEncode({
                                "name": name.text,
                                "pincode": "$pincode",
                                "token": idtoken,
                                "phone": "${widget.phoneNo}",
                              }),
                                  headers: {'Content-Type': 'application/json'},
                              );

Got Error:

     Unhandled Exception: Converting object to an encodable object failed: Instance of 'Future<IdTokenResult>'

P.S: 建议编辑一下,如果问题有什么不对的地方,我是有想法的。 (先谢谢你的帮助:) )

node.js firebase http flutter firebase-authentication
1个回答
2
投票

你需要的是token(String)而不是idtoken(IdTokenResult)

import 'package:http/http.dart' as http;

FirebaseUser user = await FirebaseAuth.instance.currentUser();

if(user!=null){
  IdTokenResult idtoken = await user.getIdToken(); 
  // get String token  
  String token = idtoken.token;
}
 http.Response response = await http.post("https://www.something.com/something/something",
                              body:jsonEncode({
                                "name": name.text,
                                "pincode": "$pincode",
                                "token": token,
                                "phone": "${widget.phoneNo}",
                              }),
                                  headers: {'Content-Type': 'application/json'},
                              );


-1
投票

我认为问题出在 getIdToken() 部分。

请你试试下面的代码。

FirebaseAuth.instance.currentUser().then(user => {
        if (user != null) {
           user.getIdToken().then(token => {
              http.Response response = await http.post("https://www.something.com/something/something",
                              body:jsonEncode({
                                "name": name.text,
                                "pincode": "$pincode",
                                "token": token,
                                "phone": "${widget.phoneNo}",
                              }),
                                  headers: {'Content-Type': 'application/json'},
                              );
        }
});
© www.soinside.com 2019 - 2024. All rights reserved.