修复用户端令牌失效后的登录恢复
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// 功能描述:配置用户端路由、鉴权守卫及登录后安全回跳。
|
||||
// 版本:1.1.0
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
@@ -9,25 +11,45 @@ import '../ui/features/profile/profile_page.dart';
|
||||
import '../ui/features/shared/record_list_page.dart';
|
||||
import '../ui/features/shared/record_list_view_model.dart';
|
||||
import '../ui/features/shop/shop_page.dart';
|
||||
import 'auth_navigation.dart';
|
||||
import 'dependencies.dart';
|
||||
|
||||
GoRouter createRouter(AppDependencies dependencies) => GoRouter(
|
||||
initialLocation: '/home',
|
||||
GoRouter createRouter(
|
||||
AppDependencies dependencies, {
|
||||
String initialLocation = '/home',
|
||||
}) => GoRouter(
|
||||
initialLocation: initialLocation,
|
||||
refreshListenable: dependencies.session,
|
||||
redirect: (context, state) {
|
||||
final authRoute = state.matchedLocation == '/login' || state.matchedLocation == '/register';
|
||||
if (!dependencies.session.isAuthenticated && !authRoute) return '/login';
|
||||
if (dependencies.session.isAuthenticated && state.matchedLocation == '/login') return '/home';
|
||||
if (!dependencies.session.isAuthenticated && !authRoute) {
|
||||
return buildAuthLocation(
|
||||
'/login',
|
||||
redirectTarget: state.uri.toString(),
|
||||
sessionExpired: dependencies.session.hasExpired,
|
||||
);
|
||||
}
|
||||
if (dependencies.session.isAuthenticated && state.matchedLocation == '/login') {
|
||||
return sanitizeRedirectTarget(state.uri.queryParameters['redirect']) ?? '/home';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: '/login',
|
||||
builder: (context, state) => LoginPage(session: dependencies.session),
|
||||
builder: (context, state) => LoginPage(
|
||||
session: dependencies.session,
|
||||
redirectTarget: sanitizeRedirectTarget(state.uri.queryParameters['redirect']),
|
||||
showSessionExpiredMessage: state.uri.queryParameters['reason'] == 'expired',
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/register',
|
||||
builder: (context, state) => RegisterPage(session: dependencies.session),
|
||||
builder: (context, state) => RegisterPage(
|
||||
session: dependencies.session,
|
||||
redirectTarget: sanitizeRedirectTarget(state.uri.queryParameters['redirect']),
|
||||
showSessionExpiredMessage: state.uri.queryParameters['reason'] == 'expired',
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/records/contracts',
|
||||
|
||||
Reference in New Issue
Block a user