[英]msal+oauth - how to retrieve refresh token from android/flutter
[英]Refresh token in flutter
我正在從事一個金融項目(Flutter),其中從后端獲取的身份驗證令牌經常過期。
只要用戶正在使用該應用程序,我如何才能使令牌不過期。
我的建議是您可以以簡單的方式處理這些事情,例如在令牌過期時獲取數據時,您會收到 401 unAuthorized Exception,您可以在其中請求新令牌(刷新令牌),然后再次發出獲取請求。 讓我知道它是否對您有用。
使用 oauth_dio:^ 0.2.3 https://pub.dev/packages/oauth_dio
OAuthToken token = oauth.requestToken(
RefreshTokenGrant(
refreshToken: '<YOUR REFRESH TOKEN>'
)
).then((token) {
print(token.accessToken);
});
我如何解決這個問題是:
final accessToken = await CustomSharedPreferences().getUserToken('userToken');
然后使用它:
bool accessTokenHasExpired = JwtDecoder.isExpired(accessToken);
使用帶有攔截器的 Dio:
if (accessTokenHasExpired) { print('Inside Access Token has Expired'); dio.interceptors.requestLock.lock(); dio.interceptors.responseLock.lock(); dio.interceptors.errorLock.lock(); _refreshed = await _regenerateAccessToken(); dio.interceptors.requestLock.unlock(); dio.interceptors.responseLock.unlock(); dio.interceptors.errorLock.unlock(); print('Outside Access Token'); }
_regenerateAccessToken 方法:
_regenerateAccessToken() async {
try{
var refreshToken = await CustomSharedPreferences().getRefreshToken('refreshToken');
print("This is the refresh token: $refreshToken");
var body = {
"refresh_token": refreshToken,
};
var dio = Dio();
Response response = await dio.post(ApiConstant.REFRESH_TOKEN, data: body,options: Options(
receiveTimeout: 5000,
headers:{
"Accept": "application/json",
"Content-Type": "application/json;charset=UTF-8",
},
validateStatus: (status){
return status! <= 500;
},
),
);
if (response.statusCode == 200 || response.statusCode == 201 ) {
RefreshTokenModel refreshToken = RefreshTokenModel.fromJson(response.data);
await CustomSharedPreferences().setUserToken(refreshToken.idToken);
var checkTime = JwtDecoder.getRemainingTime(refreshToken.idToken);
CustomSharedPreferences().setRefreshToken(refreshToken.refreshToken);
return true;
}
else {
print("Refresh Token Server Responded Back with: ${response.statusCode}");
return false;
}
}
on DioError{
return false;
}
catch (e) {
return false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.