修复工作人员端令牌失效后的登录恢复

This commit is contained in:
czl231
2026-09-05 19:51:36 +08:00
parent 7ea39334eb
commit 1670d5880f
20 changed files with 849 additions and 46 deletions

View File

@@ -1,3 +1,5 @@
// 功能描述:配置工作人员端路由、鉴权守卫及登录后安全回跳。
// 版本1.1.0
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
@@ -7,21 +9,35 @@ import '../ui/features/preflight/preflight_page.dart';
import '../ui/features/profile/profile_page.dart';
import '../ui/features/work/work_detail_page.dart';
import '../ui/features/work/work_list_page.dart';
import 'auth_navigation.dart';
import 'dependencies.dart';
GoRouter createRouter(AppDependencies dependencies) => GoRouter(
initialLocation: '/preflight',
GoRouter createRouter(
AppDependencies dependencies, {
String initialLocation = '/preflight',
}) => GoRouter(
initialLocation: initialLocation,
refreshListenable: dependencies.session,
redirect: (context, state) {
final login = state.matchedLocation == '/login';
if (!dependencies.session.isAuthenticated && !login) return '/login';
if (dependencies.session.isAuthenticated && login) return '/preflight';
if (!dependencies.session.isAuthenticated && !login) {
return buildAuthLocation(
redirectTarget: state.uri.toString(),
sessionExpired: dependencies.session.hasExpired,
);
}
if (dependencies.session.isAuthenticated && login) {
return sanitizeRedirectTarget(state.uri.queryParameters['redirect']) ?? '/preflight';
}
return null;
},
routes: [
GoRoute(
path: '/login',
builder: (context, state) => LoginPage(session: dependencies.session),
builder: (context, state) => LoginPage(
session: dependencies.session,
showSessionExpiredMessage: state.uri.queryParameters['reason'] == 'expired',
),
),
GoRoute(
path: '/preflight',