我不想在每个查询中检查我的 JWT 令牌是否已过期,我只想在应用程序第一次初始化时检查它main
,然后每 55 分钟自动刷新一次。
这是我在 Widget 树顶部调用的刷新函数;
void main() async {
await refreshToken()
};
这是 refreshToken 代码;
Future<String?> refreshToken() async {
String? refreshToken = await getCryptRefresh(); //gets refresh token from an encrypted box
final http.Response response =
await http.post(Uri.parse('http://example.com/refresh'),
headers: <String, String>{'Content-Type': 'application/json; charset=UTF-8'},
body: jsonEncode(<String?, dynamic>{
'email': currentemail,
'id': currentuserid,
'refreshToken': refreshToken
}),
);
if (response.body.contains('token')) {
Map<String, dynamic> refreshMap = json.decode(response.body);
String token = refreshMap['token'];
putCryptJWT(token); // stores new token in encrypted Hive box
print("token renewed = " + token);
Timer(Duration(minutes: 55), () {
refreshToken();
});
return token;
} else {
String noresponse = 'responsebody doesnt contain token';
print(noresponse);
}
}
Android Studio 首先给了我一个 null 错误,下面有一条红线,refreshToken()
并建议了一个 nullcheck !
。但是一旦我这样做了,我就给了我这个错误;
The expression doesn't evaluate to a function, so it can't be invoked.
它建议我删除 getter 调用中的括号。所以我把括号和 nullcheck 都删除了refreshToken
;
但它并没有像我希望的那样每 55 分钟运行一次。
我宁愿不检查每个查询的到期时间。我的 JWTToken 和它的 RefreshToken 都存储在一个加密的 Hive 框中。因此检查每个查询似乎有点密集。