flutter_integrated_whb/lib/services/auth_service.dart

138 lines
4.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'dart:convert';
import 'dart:io';
import 'package:encrypt/encrypt.dart' as encrypt;
import 'package:flutter/src/widgets/framework.dart';
import 'package:pointycastle/asymmetric/api.dart' show RSAPublicKey;
import 'package:qhd_prevention/pages/mine/mine_set_pwd_page.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';
import '../http/ApiService.dart';
class AuthService {
static const _keyUser = 'USER';
static const _keyRemember = 'remember';
static const _keyIsLoggedIn = 'isLoggedIn';
/// 登录
static Future<Map<String, dynamic>> 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 {} ;
// return false;
}
final data = await ApiService.loginCheck(encrypted);
final result = data['result'] as String? ?? '';
if (result != 'success') {
Fluttertoast.showToast(msg: data['msg'] ?? '');
return data;
// 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 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> checkCameraPermission() async {
final status = await Permission.camera.status;
if (status.isDenied) {
final result = await Permission.camera.request();
return result.isGranted;
}
return status.isGranted;
}
// 检查并请求照片库权限iOS和存储权限Android
static Future<bool> checkPhotoLibraryPermission() async {
if (Platform.isIOS) {
final status = await Permission.photos.status;
if (status.isDenied) {
final result = await Permission.photos.request();
return result.isGranted;
}
return status.isGranted;
} else {
final status = await Permission.storage.status;
if (status.isDenied) {
final result = await Permission.storage.request();
return result.isGranted;
}
return status.isGranted;
}
}
/// 验证是否已登录(通过重新登录)
static Future<Map<String, dynamic>> isLoggedIn() async {
final prefs = await SharedPreferences.getInstance();
final isLocalLoggedIn = prefs.getBool(_keyIsLoggedIn) ?? false;
if (!isLocalLoggedIn) return {};
final remember = prefs.getStringList(_keyRemember);
if (remember == null || remember.length < 2) return {};
final username = remember[0];
final password = remember[1];
// 用存储的账号密码重新登录
final data = await login(username, password);
if (data.isEmpty||data['result']!= 'success') {
await logout();
return data;
}
return data;
}
/// 获取已保存的用户信息
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);
}
}