QinGang_interested/lib/services/auth_service.dart

207 lines
6.6 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:qhd_prevention/services/StorageService.dart';
import 'package:qhd_prevention/tools/encrypt.dart';
import 'package:qhd_prevention/tools/tools.dart' hide C1C2C3;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';
import '../http/ApiService.dart';
import 'package:qhd_prevention/services/SessionService.dart';
import 'package:qhd_prevention/services/heartbeat_service.dart';
class AuthService {
static const _keyUser = 'USER';
static const _keyUserInfoData = 'user_info';
static const _keyRemember = 'remember';
static const _keyIsLoggedIn = 'isLoggedIn';
/// 登录
static Future<Map<String, dynamic>> login(
Map formData,
String username,
String password,
) async {
final data = {'phone': username, 'password': password, ...formData};
final res = await AuthApi.userlogin(data);
if (!res['success']) {
Fluttertoast.showToast(msg: res['errMessage'] ?? '');
return {};
}
final resData = res['data'];
bool isInfoComplete = resData['isInfoComplete'] ?? false;
List firmList = resData['corpInfoCOList'] ?? [];
if (firmList.length == 1 && isInfoComplete) {
// 入职一个企业直接进行底座登录传入企业
Map data = {
'id': firmList.first['id'] ?? '',
'corpinfoId': firmList.first['corpinfoId'] ?? '',
};
return AuthService.gbsLogin(username, password, data);
} else if (firmList.length > 1) {
// 如果入职多个
if (StorageService.instance.getString('key.saveJoinFirmInfo') != null) {
// 有缓存的登录过的企业
Map jsonData = json.decode(
StorageService.instance.getString('key.saveJoinFirmInfo') ?? '{}',
);
return AuthService.gbsLogin(username, password, jsonData);
} else {
// 多个企业 也没有缓存过登录的企业
return {
'isChooseFirm': false,
'isInfoComplete': isInfoComplete,
'firmList': firmList,
'userName': username,
'password': password,
};
}
} else {
return {
'isChooseFirm': false,
'isInfoComplete': isInfoComplete,
'firmList': [],
'userName': username,
'password': password,
};
}
}
static Future<Map<String, dynamic>> gbsLogin(
String username,
String password,
Map params,
) async {
final encrypted = Encrypt.encrypt(password);
if (encrypted == null) {
Fluttertoast.showToast(msg: '加密失败');
return {};
}
Map formData = {
'captcha': "9999",
'clientId': ApiService.clientId,
'identifier': '',
'username': username,
'captchaModeEnum': 'GRAPH',
'grantTypeEnum': 'ACCOUNT_MOBILE_PASSWORD',
'smsTwiceVerification': 'FALSE',
'userTypeEnum': 'PLATFORM',
...params,
};
final _data = Map<String, dynamic>.from(formData);
_data['password'] = encrypted;
// printLongString(jsonEncode(_data));
final result = await AuthApi.loginCheck(_data);
final success = result['success'] as bool;
if (!success) {
Fluttertoast.showToast(msg: result['errMessage'] ?? '');
return result;
// return false;
}
printLongString('token:${jsonEncode(result['data']['token'])}');
final data = result['data'] as Map<String, dynamic>;
final token = data['token'] ?? '';
SessionService.instance.setToken(token);
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_keyUser, json.encode(data));
await prefs.setStringList(_keyRemember, [username, password]);
await prefs.setBool(_keyIsLoggedIn, true);
/// 保存登录的企业
StorageService.instance.setString(
'key.saveJoinFirmInfo',
json.encode(params),
);
await AuthApi.getUserData().then((result) async {
SessionService.instance.updateFromApiResponse(result);
await SessionService.instance.saveToPrefs();
SessionService.instance.setToken(token);
});
return result;
}
// 检查并请求相机权限
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 {
return {};
// 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<Map<String, dynamic>?> getUserInfoData() async {
final prefs = await SharedPreferences.getInstance();
final jsonStr = prefs.getString(_keyUserInfoData);
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);
// 停止心跳服务
HeartbeatService().stop();
// 清空Session
await SessionService.instance.clear();
}
}