53 lines
1.7 KiB
Dart
53 lines
1.7 KiB
Dart
import 'dart:convert';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../core/constants.dart';
|
|
|
|
class AuthService {
|
|
static const _tokenKey = 'access_token';
|
|
|
|
/// Intenta hacer login. Devuelve null si ok, o un mensaje de error.
|
|
Future<String?> login(String email, String password) async {
|
|
try {
|
|
final response = await http.post(
|
|
Uri.parse('$kApiBase/login'),
|
|
headers: {'Content-Type': 'application/json'},
|
|
body: jsonEncode({'email': email, 'password': password}),
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
final data = jsonDecode(response.body) as Map<String, dynamic>;
|
|
final token = data['access_token'] as String?;
|
|
if (token != null) {
|
|
await _saveToken(token);
|
|
return null; // éxito
|
|
}
|
|
return 'Respuesta inesperada del servidor';
|
|
} else if (response.statusCode == 401) {
|
|
return 'Email o contraseña incorrectos';
|
|
} else {
|
|
return 'Error del servidor (${response.statusCode})';
|
|
}
|
|
} catch (_) {
|
|
return 'No se pudo conectar con el servidor';
|
|
}
|
|
}
|
|
|
|
Future<void> logout() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.remove(_tokenKey);
|
|
}
|
|
|
|
Future<String?> getToken() async {
|
|
return '11e2d9ac6355c3ed64e7651451f8a8f6fbbe9a6fa1a720a6f390dd598533faf5';
|
|
final prefs = await SharedPreferences.getInstance();
|
|
return prefs.getString(_tokenKey);
|
|
}
|
|
|
|
Future<bool> isLoggedIn() async => (await getToken()) != null;
|
|
|
|
Future<void> _saveToken(String token) async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setString(_tokenKey, token);
|
|
}
|
|
}
|