我是flutter新手,我正在使用http包进行网络呼叫。如果请求200的响应码,我想刷新令牌并再次调用请求。如何使用http包获取此信息?我听说过dio包,但它对我来说很复杂。
User getUser(){
final response = http.post(Uri.https(BASE_URL, '/api/user'),
headers: {'Authorization: Bearer $token'});
if(response.statusCode == 200){
return User.fromJson(jsonDecode(response.body)['user']);
}
else if(response.statusCode == 401){
//refresh token and call getUser again
}
}发布于 2021-04-25 17:06:25
您可以使用刷新标记,如下所示:
User getUser(){
final response = http.post(Uri.https(BASE_URL, '/api/user'),
headers: {'Authorization: Bearer $token'});
if(response.statusCode == 200){
return User.fromJson(jsonDecode(response.body)['user']);
}
else if(response.statusCode == 401){
//refresh token and call getUser again
final response = http.post(Uri.https(BASE_URL, '/api/[YourAuthorizationEndpoint]'),
headers: {'grant_type': 'refresh_token', 'refresh_token': '$refresh_token'});
token = jsonDecode(response.body)['token'];
refresh_token = jsonDecode(response.body)['refresh_token'];
return getUser();
}
}发布于 2021-07-31 20:47:43
您可以使用dart的http/retry包:
import 'package:http/http.dart' as http;
import 'package:http_retry/http_retry.dart';
final client = RetryClient(
http.Client(),
retries: 1,
when: (response) {
return response.statusCode == 401 ? true : false;
},
onRetry: (req, res, retryCount) {
if (retryCount == 0 && res?.statusCode == 401) {
// refresh token
}
},
);
try {
final response = await client.get('http://www.example.com');
} finally {
client.close();
}https://stackoverflow.com/questions/67206941
复制相似问题