initial codex commit
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:mileograph_flutter/objects/objects.dart';
|
||||
import 'package:mileograph_flutter/services/apiService.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class AuthService extends ChangeNotifier {
|
||||
final ApiService api;
|
||||
static const _tokenKey = 'auth_token';
|
||||
bool _restoring = false;
|
||||
|
||||
AuthService({required this.api});
|
||||
|
||||
@@ -29,6 +32,7 @@ class AuthService extends ChangeNotifier {
|
||||
access_token: accessToken,
|
||||
email: email,
|
||||
);
|
||||
_persistToken(accessToken);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@@ -65,8 +69,66 @@ class AuthService extends ChangeNotifier {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> tryRestoreSession() async {
|
||||
if (_restoring || _user != null) return;
|
||||
_restoring = true;
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final token = prefs.getString(_tokenKey);
|
||||
if (token == null || token.isEmpty) return;
|
||||
final userResponse = await api.get(
|
||||
'/users/me',
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'accept': 'application/json',
|
||||
},
|
||||
);
|
||||
setLoginData(
|
||||
userId: userResponse['user_id'],
|
||||
username: userResponse['username'],
|
||||
fullName: userResponse['full_name'],
|
||||
accessToken: token,
|
||||
email: userResponse['email'],
|
||||
);
|
||||
} catch (_) {
|
||||
await _clearToken();
|
||||
} finally {
|
||||
_restoring = false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _persistToken(String token) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_tokenKey, token);
|
||||
}
|
||||
|
||||
Future<void> _clearToken() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove(_tokenKey);
|
||||
}
|
||||
|
||||
Future<void> register({
|
||||
required String username,
|
||||
required String email,
|
||||
required String fullName,
|
||||
required String password,
|
||||
String inviteCode = '',
|
||||
}) async {
|
||||
final formData = {
|
||||
'user_name': username,
|
||||
'email': email,
|
||||
'full_name': fullName,
|
||||
'password': password,
|
||||
'invitation_code': inviteCode,
|
||||
'empty': '',
|
||||
'empty2': '',
|
||||
};
|
||||
await api.postForm('/register', formData);
|
||||
}
|
||||
|
||||
void logout() {
|
||||
_user = null;
|
||||
_clearToken();
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user