如何使用 http POST 方法将当前用户(使用应用程序的人)、Firebase Id 令牌从 Flutter 应用程序发送到 restapi?
Posted
技术标签:
【中文标题】如何使用 http POST 方法将当前用户(使用应用程序的人)、Firebase Id 令牌从 Flutter 应用程序发送到 restapi?【英文标题】:How to send current user's(person using the app), Firebase Id token,from the Flutter app, to restapi, using http POST method? 【发布时间】:2020-09-29 19:09:52 【问题描述】:我创建了一个应用程序,使用 Flutter for UI 和 Nodejs 中的 Restapi 作为后端。现在我想验证注册了firebase身份验证的用户,发送当前用户的firebase Id令牌。为此,我使用 HTTP Post 方法发送 id 令牌。但是出错了。
示例代码:
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',
);
出错了:
Unhandled Exception: Converting object to an encodable object failed: Instance of 'Future<IdTokenResult>'
P.S:建议编辑,如果问题有问题,我的想法 (提前感谢您的帮助:))
【问题讨论】:
【参考方案1】:你需要的是 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',
);
【讨论】:
感谢 Taym95 的回答。那么,在其余的 api 方面,firebase-admin sdk 只需要 token 不需要其他参数,如创建时间或过期时间,uid?验证当前用户? 是的,firebase-admin 只需要令牌(字符串),您可以通过将答案投票为正确来感谢我,以便其他人可以从答案中受益!! 我们可以这样回答吗:***.com/a/50295533/13462594【参考方案2】:我认为问题出在 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',
);
);
【讨论】:
以上是关于如何使用 http POST 方法将当前用户(使用应用程序的人)、Firebase Id 令牌从 Flutter 应用程序发送到 restapi?的主要内容,如果未能解决你的问题,请参考以下文章
php curl如何直接转发当前php接收的headers?get请求如何直接转发get参数?post请求如何直接转发post参数?
如何将 Apigee 的跟踪控制台 HTTP 方法更改为 POST