Я работаю над аутентификацией oauth2 в приложении flutter. Я думаю об обновлении токена, когда в любом из моих API возникает ошибка аутентификации 401. Итак, как добавить службу аутентификации ко всем HTTP-запросам во флаттере. В android у нас есть аутентификатор okhttp, который обнаруживает ошибку аутентификации во время любого вызова API и может обновить токен и продолжить предыдущий вызов API. В флаттере, как это реализовать? Я не думаю, что обрабатывать ошибку 401 во всех API - это хорошая практика.
Служба аутентификации HTTP Flutter для обновления токена oauth2
Ответы (2)
Использовать диоперехватчик
Ниже приведен фрагмент моего перехватчика.
dio.interceptors
.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
/* Write your request logic setting your Authorization header from prefs*/
String token = await prefs.accessToken;
if (token != null) {
options.headers["Authorization"] = "Bearer " + token;
return options; //continue
}, onResponse: (Response response) async {
// Write your response logic
return response; // continue
}, onError: (DioError dioError) async {
// Refresh Token
if (dioError.response?.statusCode == 401) {
Response response;
var data = <String, dynamic>{
"grant_type": "refresh_token",
"refresh_token": await prefs.refreshToken,
'email': await prefs.userEmail
};
response = await dio
.post("api/url/for/refresh/token", data: data);
if (response.statusCode == 200) {
var newRefreshToken = response.data["data"]["refresh_token"]; // get new refresh token from response
var newAccessToken = response.data["data"]["access_token"]; // get new access token from response
prefs.refreshToken = newRefreshToken;
prefs.accessToken = newAccessToken; // to be used in the request section of the interceptor
return dio.request(dioError.request.baseUrl + dioError.request.path,
options: dioError.request);
}
}
return dioError;
}));
return dio;
}
}
person
user6264291
schedule
27.08.2020
Я обычно использую шаблон параметризации всех вызовов API на стороне клиента, например этот фрагмент кода. Этот подход должен работать в любой технологии, хотя в некоторых технологиях у вас могут быть варианты реализации его через какой-то класс-перехватчик.
person
Gary Archer
schedule
17.09.2019
Да, я ожидаю того же поведения во время трепета. Я думаю, что диодный пакет выполняет те же функции
- person MohdNaseem; 28.09.2019