app mobile allarmi prima
This commit is contained in:
76
lib/services/auth_service.dart
Normal file
76
lib/services/auth_service.dart
Normal file
@@ -0,0 +1,76 @@
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'dart:convert';
|
||||
import '../models/user.dart';
|
||||
import '../utils/constants.dart';
|
||||
import 'api_service.dart';
|
||||
|
||||
class AuthService {
|
||||
static final AuthService _instance = AuthService._internal();
|
||||
factory AuthService() => _instance;
|
||||
AuthService._internal();
|
||||
|
||||
final _storage = const FlutterSecureStorage();
|
||||
final _apiService = ApiService();
|
||||
|
||||
User? _currentUser;
|
||||
User? get currentUser => _currentUser;
|
||||
bool get isAuthenticated => _currentUser != null;
|
||||
|
||||
Future<bool> login(String email, String password) async {
|
||||
try {
|
||||
final response = await _apiService.login(email, password);
|
||||
final token = response['access_token'] as String;
|
||||
|
||||
await _storage.write(key: AppConstants.storageKeyToken, value: token);
|
||||
_apiService.setAuthToken(token);
|
||||
|
||||
_currentUser = await _apiService.getCurrentUser();
|
||||
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(
|
||||
AppConstants.storageKeyUser,
|
||||
json.encode(_currentUser!.toJson()),
|
||||
);
|
||||
|
||||
return true;
|
||||
} catch (e) {
|
||||
print('Login error: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> autoLogin() async {
|
||||
try {
|
||||
final token = await _storage.read(key: AppConstants.storageKeyToken);
|
||||
if (token == null) return false;
|
||||
|
||||
_apiService.setAuthToken(token);
|
||||
_currentUser = await _apiService.getCurrentUser();
|
||||
return true;
|
||||
} catch (e) {
|
||||
print('Auto login error: $e');
|
||||
await logout();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
_currentUser = null;
|
||||
_apiService.clearAuthToken();
|
||||
await _storage.delete(key: AppConstants.storageKeyToken);
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove(AppConstants.storageKeyUser);
|
||||
await prefs.remove(AppConstants.storageKeyFcmToken);
|
||||
}
|
||||
|
||||
Future<void> saveFcmToken(String fcmToken) async {
|
||||
try {
|
||||
await _apiService.registerFcmToken(fcmToken);
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(AppConstants.storageKeyFcmToken, fcmToken);
|
||||
} catch (e) {
|
||||
print('Error saving FCM token: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user