flutter_integrated_whb/lib/services/auth_service.dart

102 lines
3.1 KiB
Dart
Raw Permalink Normal View History

2025-08-19 11:06:16 +08:00
import 'dart:convert';
import 'package:encrypt/encrypt.dart' as encrypt;
import 'package:pointycastle/asymmetric/api.dart' show RSAPublicKey;
import 'package:qhd_prevention/tools/tools.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:fluttertoast/fluttertoast.dart';
import '../http/ApiService.dart';
class AuthService {
static const _keyUser = 'USER';
static const _keyRemember = 'remember';
static const _keyIsLoggedIn = 'isLoggedIn';
/// 登录
static Future<bool> login(String username, String password) async {
final parser = encrypt.RSAKeyParser();
final pub = parser.parse(ApiService.publicKey) as RSAPublicKey;
final encrypter = encrypt.Encrypter(encrypt.RSA(publicKey: pub));
final plain = 'zcloudchina$username,zy,$password';
String encrypted;
try {
encrypted = encrypter.encrypt(plain).base64;
} catch (e) {
Fluttertoast.showToast(msg: '加密失败:$e');
return false;
}
final data = await ApiService.loginCheck(encrypted);
final result = data['result'] as String? ?? '';
if (result != 'success') {
return false;
}
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_keyUser, json.encode(data));
await prefs.setStringList(_keyRemember, [username, password]);
await prefs.setBool(_keyIsLoggedIn, true);
SessionService.instance
..setLoginUserId(data['USER_ID'] as String)
..setCorpinfoId(data['CORPINFO_ID'] as String)
..setDeptId(data['DEPARTMENT_ID'] as String)
..setDeptLevel(data['DEPARTMENT_LEVEL'] as String)
..setIsRest(data['ISREST'] as String)
..setUsername(data['NAME'] as String)
..setLoginUser(data);
return true;
}
/// 检查更新
static Future<Map<String, dynamic>> checkUpdate() async {
final data = await ApiService.getUpdateInfo();
final result = data['result'] as String? ?? '';
if (result == 'success') {
return data;
}
return {};
}
/// 验证是否已登录(通过重新登录)
static Future<bool> isLoggedIn() async {
final prefs = await SharedPreferences.getInstance();
final isLocalLoggedIn = prefs.getBool(_keyIsLoggedIn) ?? false;
if (!isLocalLoggedIn) return false;
final remember = prefs.getStringList(_keyRemember);
if (remember == null || remember.length < 2) return false;
final username = remember[0];
final password = remember[1];
// 用存储的账号密码重新登录
final success = await login(username, password);
if (!success) {
await logout();
return false;
}
return true;
}
/// 获取已保存的用户信息
static Future<Map<String, dynamic>?> getUser() async {
final prefs = await SharedPreferences.getInstance();
final jsonStr = prefs.getString(_keyUser);
if (jsonStr == null) return null;
return json.decode(jsonStr);
}
/// 登出
static Future<void> logout() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove(_keyUser);
await prefs.remove(_keyRemember);
await prefs.setBool(_keyIsLoggedIn, false);
}
}