Browse Source

加入验证码,自动登陆还没处理好

newdev_shunjiawei
fdp 2 years ago
parent
commit
b21a9b17e6
  1. 24
      lib/data/models/user_Info.dart
  2. 10
      lib/data/services/network/api.dart
  3. 121
      lib/data/services/network/auth_interceptor.dart
  4. 2
      lib/data/services/network/dio_manager.dart
  5. 52
      lib/modules/login/controllers/login_controller.dart
  6. 33
      lib/modules/login/entity/api.dart
  7. 45
      lib/modules/login/entity/dio_manager.dart
  8. 4
      lib/modules/login/entity/nw_api.dart
  9. 8
      lib/modules/login/entity/nw_method.dart
  10. 1
      lib/modules/splash/controllers/splash_controller.dart

24
lib/data/models/user_Info.dart

@ -70,6 +70,30 @@ class User {
// createtime: _parseTimestamp(userData['createtime']), // createtime: _parseTimestamp(userData['createtime']),
// wxopenid: (userData?['wxopenid'] as String?) ?? '', // wxopenid: (userData?['wxopenid'] as String?) ?? '',
// googleopenid: (userData?['googleopenid'] as String?) ?? '', // googleopenid: (userData?['googleopenid'] as String?) ?? '',
// facebookopenid: (userData?['facebookopenid'] as String?) ?? '',
);
}
factory User.fronTokenJson(Map<String, dynamic> json) {
// 修复1:安全获取嵌套的 user 字段
final userData = json['user'] as Map<String, dynamic>?; // 允许空值
final token = '';
// 更新单例实例
return _instance = User._(
token: token as String? ?? '',
name: (userData?['name'] as String?) ?? '默认名称', // 提供默认值
uid: (userData?['uid'] as String?) ?? '',
avatar: (userData?['avatar'] as String?) ?? '',
deviceid: (userData?['deviceid'] as String?) ?? '',
language: (userData?['language'] as String?) ?? 'en',
mail: (userData?['mail'] as String?) ?? '',
phone: (userData?['phone'] as String?) ?? '',
phonemac: (userData?['phonemac'] as String?) ?? '',
password: (userData?['password'] as String?) ?? '',
// lastbettime: _parseTimestamp(userData['lastbettime']),
// createtime: _parseTimestamp(userData['createtime']),
// wxopenid: (userData?['wxopenid'] as String?) ?? '',
// googleopenid: (userData?['googleopenid'] as String?) ?? '',
// facebookopenid: (userData?['facebookopenid'] as String?) ?? '', // facebookopenid: (userData?['facebookopenid'] as String?) ?? '',
); );
} }

10
lib/data/services/network/api.dart

@ -4,6 +4,7 @@ import 'nw_method.dart';
class Api { class Api {
// 登录 // 登录
static login([params]) { static login([params]) {
print("请求后台数据params=${params}");
return DioManager().request( return DioManager().request(
NWMethod.post, NWMethod.post,
'/api/home/user_sgin', '/api/home/user_sgin',
@ -20,6 +21,15 @@ class Api {
); );
} }
static tokenlogin([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_getinfo',
params: params,
);
}
// 获取阿里token // 获取阿里token
static getAliToken([params]) { static getAliToken([params]) {
return DioManager().request( return DioManager().request(

121
lib/data/services/network/auth_interceptor.dart

@ -1,65 +1,66 @@
// import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
// import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
// import 'package:get/get.dart' hide Response; import 'package:get/get.dart' hide Response;
// import '../scenes/start/start_logic.dart'; import 'package:get_storage/get_storage.dart';
// import 'entity/base_entity.dart'; import 'entity/base_entity.dart';
// class AuthInterceptor extends Interceptor { class AuthInterceptor extends Interceptor {
// final state = Get.find<StartLogic>().state; final GetStorage _storage = GetStorage();
// @override @override
// void onRequest(RequestOptions options, RequestInterceptorHandler handler) { void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
// options.headers['Authorization'] = state.loginModel.token; var jsonString = _storage.read<String>("logintoken");
// handler.next(options); options.headers['Authorization'] = jsonString;
// } handler.next(options);
}
// @override @override
// void onResponse(Response response, ResponseInterceptorHandler handler) async { void onResponse(Response response, ResponseInterceptorHandler handler) async {
// BaseEntity entity = BaseEntity.fromJson(response.data); BaseEntity entity = BaseEntity.fromJson(response.data);
// if (entity.code == 0) { if (entity.code == 0) {
// response.data = entity.data ?? {}; response.data = entity.data ?? {};
// handler.resolve(response); handler.resolve(response);
// } else { } else {
// response.data = null; response.data = null;
// handler.next(response); handler.next(response);
// return EasyLoading.showError(entity.message ?? 'unknownError'.tr); return EasyLoading.showError(entity.message ?? 'unknownError'.tr);
// } }
// } }
// @override @override
// void onError(DioException err, ErrorInterceptorHandler handler) { void onError(DioException err, ErrorInterceptorHandler handler) {
// switch (err.type) { switch (err.type) {
// case DioExceptionType.cancel: case DioExceptionType.cancel:
// { {
// EasyLoading.showError('requestCancellation'.tr); EasyLoading.showError('requestCancellation'.tr);
// } }
// case DioExceptionType.connectionTimeout: case DioExceptionType.connectionTimeout:
// { {
// EasyLoading.showError('connectionTimeout'.tr); EasyLoading.showError('connectionTimeout'.tr);
// } }
// case DioExceptionType.sendTimeout: case DioExceptionType.sendTimeout:
// { {
// EasyLoading.showError('requestTimeout'.tr); EasyLoading.showError('requestTimeout'.tr);
// } }
// case DioExceptionType.receiveTimeout: case DioExceptionType.receiveTimeout:
// { {
// EasyLoading.showError('responseTimeout'.tr); EasyLoading.showError('responseTimeout'.tr);
// } }
// case DioExceptionType.badResponse: case DioExceptionType.badResponse:
// { {
// try { try {
// String? errMsg = err.response?.statusMessage; String? errMsg = err.response?.statusMessage;
// EasyLoading.showError(errMsg ?? 'unknownError'.tr); EasyLoading.showError(errMsg ?? 'unknownError'.tr);
// } on Exception catch (_) { } on Exception catch (_) {
// EasyLoading.showError('unknownError'.tr); EasyLoading.showError('unknownError'.tr);
// } }
// } }
// default: default:
// { {
// EasyLoading.showError(err.message ?? 'unknownError'.tr); EasyLoading.showError(err.message ?? 'unknownError'.tr);
// } }
// } }
// handler.next(err); handler.next(err);
// } }
// } }

2
lib/data/services/network/dio_manager.dart

@ -20,7 +20,7 @@ class DioManager {
); );
dio = Dio(options); dio = Dio(options);
//fdp
// dio.interceptors.add(AuthInterceptor()); // dio.interceptors.add(AuthInterceptor());
} }

52
lib/modules/login/controllers/login_controller.dart

@ -3,11 +3,10 @@ import 'package:flutter/material.dart';
import '../../../routes/app_routes.dart'; import '../../../routes/app_routes.dart';
import 'dart:convert'; import 'dart:convert';
import 'dart:ffi'; import 'dart:ffi';
import '../../settings/controllers/settings_controller.dart';
import 'facebookLogin.dart'; import 'facebookLogin.dart';
import 'googleLogin.dart'; import 'googleLogin.dart';
import 'weixinLogin.dart'; import 'weixinLogin.dart';
import '../entity/api.dart'; import '../../../data/services/network/api.dart';
import '../../../../data/models/user_Info.dart'; import '../../../../data/models/user_Info.dart';
//import 'package:shared_preferences/shared_preferences.dart'; //import 'package:shared_preferences/shared_preferences.dart';
import 'package:get_storage/get_storage.dart'; import 'package:get_storage/get_storage.dart';
@ -223,6 +222,21 @@ class LoginController extends GetxController {
return !_verificationCode.contains(''); return !_verificationCode.contains('');
} }
Future<void> getLoginToken() async {
// 使用正确语法创建请求头
var response = await Api.tokenlogin();
if (response != null) {
if (response?["code"] == null) {
final user = User.fronTokenJson(response);
await _storage.write(
'user', jsonEncode(user.toJson())); // 使用 user.toJson()
Get.offAllNamed(Routes.pairing);
}
} else {
login();
}
}
// 登录 // 登录
Future<void> login() async { Future<void> login() async {
// 暂时关闭验证码验证 // 暂时关闭验证码验证
@ -240,26 +254,27 @@ class LoginController extends GetxController {
_isLoading.value = true; _isLoading.value = true;
try { try {
// 模拟验证过程
await Future.delayed(const Duration(seconds: 2)); await Future.delayed(const Duration(seconds: 2));
// 模拟验证过程
switch (loginType) { switch (loginType) {
case 0 || 1: case 0 || 1:
{ {
if (!isVerificationCodeComplete()) { // if (!isVerificationCodeComplete()) {
Get.snackbar( // Get.snackbar(
'提示', // '提示',
'请输入完整的验证码', // '请输入完整的验证码',
snackPosition: SnackPosition.TOP, // snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1), // backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red, // colorText: Colors.red,
); // );
break; // break;
} // }
requestLogin({ requestLogin({
"mail": verificationCodeController.text, "mail": contactController.text,
"phone": "", "phone": "",
"stype": loginType, "stype": loginType,
"vcode": contactController.text, "vcode": verificationCodeController.text,
"ttoken": "", "ttoken": "",
"phonemodel": "", "phonemodel": "",
"phonemac": "", "phonemac": "",
@ -410,13 +425,12 @@ class LoginController extends GetxController {
try { try {
print('响应数据: ${response.toString()}'); // 调试输出原始数据 print('响应数据: ${response.toString()}'); // 调试输出原始数据
if (response['code'].toString() == '0' && if (response['code'].toString() == '0') {
response['msg'].toString() == "Success") {
// 新增:检查 user 字段是否存在且类型正确 // 新增:检查 user 字段是否存在且类型正确
if (response.containsKey('data') && response['data'] is Map) { if (response.containsKey('data') && response['data'] is Map) {
final user = User.fromJson(response); final user = User.fromJson(response);
print('用户初始化成功: ${user.name}'); print('用户初始化成功: ${user.token}');
await _storage.write("logintoken", user.token);
// 存储到 SharedPreferences (仅存储用户数据) // 存储到 SharedPreferences (仅存储用户数据)
//final prefs = await GetStorage(); //final prefs = await GetStorage();
await _storage.write( await _storage.write(

33
lib/modules/login/entity/api.dart

@ -1,33 +0,0 @@
import 'dio_manager.dart';
import 'nw_method.dart';
class Api {
// 登录
static login([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_sgin',
params: params,
);
}
// 获取验证码
static getCode([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_verification',
params: params,
);
}
// 获取阿里token
static getAliToken([params]) {
return DioManager().request(
NWMethod.post,
'/api/home/auth_alitoken',
params: params,
);
}
}

45
lib/modules/login/entity/dio_manager.dart

@ -1,45 +0,0 @@
import 'package:dio/dio.dart';
//import 'auth_interceptor.dart';
import 'nw_api.dart';
import 'nw_method.dart';
class DioManager {
static final DioManager _shared = DioManager._internal();
factory DioManager() => _shared;
late Dio dio;
DioManager._internal() {
BaseOptions options = BaseOptions(
baseUrl: NWApi.baseApi,
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
);
dio = Dio(options);
//dio.interceptors.add(AuthInterceptor());
}
// 请求,返回参数为 T
// method:请求方法,NWMethod.POST等
// path:请求地址
// params:请求参数
Future request<T>(
NWMethod method,
String path, {
Map? params,
Map<String, dynamic>? queryParameters,
}) async {
Response response = await dio.request(
path,
data: params,
queryParameters: queryParameters,
options: Options(method: nwMethodValues[method]),
);
return response.data;
}
}

4
lib/modules/login/entity/nw_api.dart

@ -1,4 +0,0 @@
class NWApi {
// static const baseApi = "https://www.deapsound.com";
static const baseApi = "https://www.deapsound.com";
}

8
lib/modules/login/entity/nw_method.dart

@ -1,8 +0,0 @@
enum NWMethod { get, post, delete, put }
const nwMethodValues = {
NWMethod.get: "get",
NWMethod.post: "post",
NWMethod.delete: "delete",
NWMethod.put: "put"
};

1
lib/modules/splash/controllers/splash_controller.dart

@ -84,4 +84,5 @@ class SplashController extends GetxController {
Get.offAllNamed(Routes.login); Get.offAllNamed(Routes.login);
}); });
} }
// fdp挑转登陆
} }

Loading…
Cancel
Save