🐛 Fix refresh token
This commit is contained in:
@ -4,12 +4,11 @@ import 'package:surface/providers/sn_network.dart';
|
||||
import 'package:surface/types/attachment.dart';
|
||||
|
||||
class SnAttachmentProvider {
|
||||
late final SnNetworkProvider sn;
|
||||
|
||||
late final SnNetworkProvider _sn;
|
||||
final Map<String, SnAttachment> _cache = {};
|
||||
|
||||
SnAttachmentProvider(BuildContext context) {
|
||||
sn = context.read<SnNetworkProvider>();
|
||||
_sn = context.read<SnNetworkProvider>();
|
||||
}
|
||||
|
||||
Future<SnAttachment> getOne(String rid, {noCache = false}) async {
|
||||
@ -17,7 +16,7 @@ class SnAttachmentProvider {
|
||||
return _cache[rid]!;
|
||||
}
|
||||
|
||||
final resp = await sn.client.get('/cgi/uc/attachments/$rid/meta');
|
||||
final resp = await _sn.client.get('/cgi/uc/attachments/$rid/meta');
|
||||
final out = SnAttachment.fromJson(resp.data);
|
||||
_cache[rid] = out;
|
||||
|
||||
@ -33,7 +32,7 @@ class SnAttachmentProvider {
|
||||
return rids.map((rid) => _cache[rid]!).toList();
|
||||
}
|
||||
|
||||
final resp = await sn.client.get('/cgi/uc/attachments', queryParameters: {
|
||||
final resp = await _sn.client.get('/cgi/uc/attachments', queryParameters: {
|
||||
'take': pendingFetch.length,
|
||||
'id': pendingFetch.join(','),
|
||||
});
|
||||
|
@ -67,7 +67,7 @@ class SnNetworkProvider {
|
||||
final b64 = utf8.fuse(base64Url);
|
||||
final payload = b64.decode(rawPayload);
|
||||
final exp = jsonDecode(payload)['exp'];
|
||||
if (exp >= DateTime.now().millisecondsSinceEpoch) {
|
||||
if (exp <= DateTime.now().millisecondsSinceEpoch ~/ 1000) {
|
||||
log('Access token need refresh, doing it at ${DateTime.now()}');
|
||||
atk = await refreshToken();
|
||||
}
|
||||
@ -78,6 +78,8 @@ class SnNetworkProvider {
|
||||
log('Access token refresh failed...');
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
log('Failed to authenticate user: $err');
|
||||
} finally {
|
||||
handler.next(options);
|
||||
}
|
||||
@ -114,7 +116,12 @@ class SnNetworkProvider {
|
||||
final rtk = await _storage.read(key: kRtkStoreKey);
|
||||
if (rtk == null) return null;
|
||||
|
||||
final resp = await client.post('/cgi/id/auth/token', data: {
|
||||
final dio = Dio();
|
||||
dio.options.baseUrl = kUseLocalNetwork
|
||||
? 'http://localhost:8001'
|
||||
: 'https://api.sn.solsynth.dev';
|
||||
|
||||
final resp = await dio.post('/cgi/id/auth/token', data: {
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': rtk,
|
||||
});
|
||||
|
@ -10,12 +10,11 @@ class UserProvider extends ChangeNotifier {
|
||||
bool isAuthorized = false;
|
||||
SnAccount? user;
|
||||
|
||||
late final SnNetworkProvider sn;
|
||||
|
||||
late final SnNetworkProvider _sn;
|
||||
late final FlutterSecureStorage _storage = FlutterSecureStorage();
|
||||
|
||||
UserProvider(BuildContext context) {
|
||||
sn = context.read<SnNetworkProvider>();
|
||||
_sn = context.read<SnNetworkProvider>();
|
||||
|
||||
_storage.read(key: kAtkStoreKey).then((value) {
|
||||
isAuthorized = value != null;
|
||||
@ -31,7 +30,7 @@ class UserProvider extends ChangeNotifier {
|
||||
Future<SnAccount?> refreshUser() async {
|
||||
if (!isAuthorized) return null;
|
||||
|
||||
final resp = await sn.client.get('/cgi/id/users/me');
|
||||
final resp = await _sn.client.get('/cgi/id/users/me');
|
||||
final out = SnAccount.fromJson(resp.data);
|
||||
|
||||
user = out;
|
||||
@ -39,4 +38,11 @@ class UserProvider extends ChangeNotifier {
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
void logoutUser() async {
|
||||
_sn.clearTokenPair();
|
||||
isAuthorized = false;
|
||||
user = null;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user