提交 57e655c8 authored 作者: yueweilu's avatar yueweilu

第二个用户登录 第一个登录的用户退出登录

上级 ec1b92d8
...@@ -89,7 +89,7 @@ class LoginController extends GetxController { ...@@ -89,7 +89,7 @@ class LoginController extends GetxController {
/// 测试账号 /// 测试账号
if (kDebugMode) { if (kDebugMode) {
phoneInput.text = '13521054068'; phoneInput.text = '13521054068';
passwordInput.text = 'zj123456'; passwordInput.text = '12345678';
// phoneInput.text = '17311837355'; // phoneInput.text = '17311837355';
// passwordInput.text = '12345678'; // passwordInput.text = '12345678';
} }
...@@ -138,14 +138,18 @@ class LoginController extends GetxController { ...@@ -138,14 +138,18 @@ class LoginController extends GetxController {
// 存储用户信息 // 存储用户信息
await Future.wait([ await Future.wait([
UserStore.to.setToken(result.token!), UserStore.to.login(result)
UserStore.to.setAccessToken(result.accessToken!),
]);
await Future.wait([
UserStore.to.setInfo(result),
UserStore.to.profile(),
]); ]);
// await Future.wait([
// UserStore.to.setToken(result.token!),
// UserStore.to.setAccessToken(result.accessToken!),
//
// ]);
//
// await Future.wait([
// UserStore.to.setInfo(result),
// UserStore.to.profile(),
// ]);
if (!context.mounted) return; if (!context.mounted) return;
if (context.canPop()){ if (context.canPop()){
......
...@@ -635,6 +635,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -635,6 +635,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
Console.log('解压缩文件:$fileName,保存路径:$filePath'); Console.log('解压缩文件:$fileName,保存路径:$filePath');
} }
} }
CustomToast.dismiss();
Toast.show('离线成功'); Toast.show('离线成功');
final exit = await _isExistFile(bookId); final exit = await _isExistFile(bookId);
update(); update();
...@@ -842,7 +843,6 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -842,7 +843,6 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
/// 添加阅读时长 /// 添加阅读时长
void _addReadTime({required type}) async{ void _addReadTime({required type}) async{
final result = await LibraryAPI.addReadTime(bookId: bookId, readTypes: type); final result = await LibraryAPI.addReadTime(bookId: bookId, readTypes: type);
Console.log('-------------$result-------------------');
} }
/// 获取离线文件路径 /// 获取离线文件路径
void getBookDown() async{ void getBookDown() async{
...@@ -852,6 +852,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide ...@@ -852,6 +852,7 @@ class ReadController extends FullLifeCycleController with GetSingleTickerProvide
} }
else{ else{
CustomToast.loading();
final result = await LibraryAPI.getbookDownloadParam(bookId: bookId); final result = await LibraryAPI.getbookDownloadParam(bookId: bookId);
Console.log('----------_getBookDown------------------${result.download}'); Console.log('----------_getBookDown------------------${result.download}');
......
...@@ -140,7 +140,16 @@ abstract class Routes { ...@@ -140,7 +140,16 @@ abstract class Routes {
initialLocation: '/$splash', initialLocation: '/$splash',
// initialLocation: '/', // initialLocation: '/',
observers: [observer], observers: [observer],
// redirect: (context, state) => _RouteRedirect.auth(), refreshListenable:UserStore.to.needLogin,
redirect: (context, state) {
final currentRoute = state.matchedLocation;
final loginRoute = state.namedLocation(login);
final mainRoute = state.namedLocation(main);
if (currentRoute.contains(mainRoute)) return null;
if(currentRoute.contains(loginRoute)) return null;
if(!UserStore.to.isLogin) return loginRoute;
return null;
},
routes: [ routes: [
GoRoute( GoRoute(
path: '/$splash', path: '/$splash',
......
...@@ -99,9 +99,6 @@ class HttpService extends GetxService { ...@@ -99,9 +99,6 @@ class HttpService extends GetxService {
try { try {
final requestOptions = options ?? Options(); final requestOptions = options ?? Options();
requestOptions.headers = _getHeaders(excludeToken: excludeToken,params: params,url: url); requestOptions.headers = _getHeaders(excludeToken: excludeToken,params: params,url: url);
Console.log('----headers------${requestOptions.headers}');
Console.log('----params------$params');
// 如果启用缓存,将cacheEnabled参数添加到请求选项中 // 如果启用缓存,将cacheEnabled参数添加到请求选项中
if(cacheEnabled){ if(cacheEnabled){
requestOptions.extra ??= {}; requestOptions.extra ??= {};
...@@ -114,6 +111,7 @@ class HttpService extends GetxService { ...@@ -114,6 +111,7 @@ class HttpService extends GetxService {
cancelToken: cancelToken, cancelToken: cancelToken,
); );
if (showLoading) CustomToast.dismiss(); if (showLoading) CustomToast.dismiss();
Console.log('----headers------${requestOptions.headers}\n----params------$params-----');
Console.log(response.data); Console.log(response.data);
return ResponseModel.fromJson(response.data); return ResponseModel.fromJson(response.data);
} catch (error){ } catch (error){
...@@ -313,6 +311,7 @@ class _RequestInterceptor extends Interceptor { ...@@ -313,6 +311,7 @@ class _RequestInterceptor extends Interceptor {
Future<String?> refreshToken() async { Future<String?> refreshToken() async {
Console.log('--------refreshToken----------------');
final result = await HttpService.to.post( final result = await HttpService.to.post(
'/v1/members/login/getToken', '/v1/members/login/getToken',
params: { params: {
...@@ -320,6 +319,12 @@ class _RequestInterceptor extends Interceptor { ...@@ -320,6 +319,12 @@ class _RequestInterceptor extends Interceptor {
} }
); );
if (result.data is Map) { if (result.data is Map) {
final String token = result.data['token'];
final String accessToken = result.data['access_token'];
if(token.isEmpty && accessToken.isEmpty){
UserStore.to.logout();
return null;
}
await Future.wait([ await Future.wait([
UserStore.to.setToken(result.data['token']), UserStore.to.setToken(result.data['token']),
UserStore.to.setAccessToken(result.data['access_token']), UserStore.to.setAccessToken(result.data['access_token']),
......
part of store; part of store;
class UserStore extends GetxController { class UserStore extends GetxController{
// 获取 UserStore 实例 // 获取 UserStore 实例
static UserStore get to => Get.find(); static UserStore get to => Get.find();
...@@ -21,6 +21,10 @@ class UserStore extends GetxController { ...@@ -21,6 +21,10 @@ class UserStore extends GetxController {
UserModel _info = UserModel(); UserModel _info = UserModel();
UserModel get info => _info; UserModel get info => _info;
// 是否需要登录
final ValueNotifier<bool> _needLogin = ValueNotifier<bool>(false);
ValueNotifier<bool> get needLogin => _needLogin;
@override @override
...@@ -29,6 +33,17 @@ class UserStore extends GetxController { ...@@ -29,6 +33,17 @@ class UserStore extends GetxController {
_token = StorageService.to.getString(kLocalToken); _token = StorageService.to.getString(kLocalToken);
} }
Future<void>login(UserModel value) async{
_token = value.token??'';
_accessToken = value.accessToken??'';
await StorageService.to.setString(kLocalToken,_token);
await StorageService.to.setString(kLocalAccessToken, value.accessToken??'');
await StorageService.to.setString(kLocalUserInfo, jsonEncode(value.toJson()));
_needLogin.value = false;
_info = value;
_isLogin = true;
update();
}
Future<void> setToken(String value) async { Future<void> setToken(String value) async {
await StorageService.to.setString(kLocalToken, value); await StorageService.to.setString(kLocalToken, value);
_token = value; _token = value;
...@@ -41,6 +56,7 @@ class UserStore extends GetxController { ...@@ -41,6 +56,7 @@ class UserStore extends GetxController {
Future<void> setInfo(UserModel value) async { Future<void> setInfo(UserModel value) async {
await StorageService.to.setString(kLocalUserInfo, jsonEncode(value.toJson())); await StorageService.to.setString(kLocalUserInfo, jsonEncode(value.toJson()));
_needLogin.value = false;
_info = value; _info = value;
} }
...@@ -51,6 +67,7 @@ class UserStore extends GetxController { ...@@ -51,6 +67,7 @@ class UserStore extends GetxController {
await StorageService.to.remove(kLocalUserInfo); await StorageService.to.remove(kLocalUserInfo);
_token = ''; _token = '';
_isLogin = false; _isLogin = false;
_needLogin.value = true;
} }
Future<void> profile() async { Future<void> profile() async {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论