我已经创建了一个应用程序,使用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: 建议编辑一下,如果问题有什么不对的地方,我是有想法的。 (先谢谢你的帮助:) )
你需要的是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'},
);
我认为问题出在 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'},
);
}
});