Files
platforms/apps/service_app/lib/app/auth_navigation.dart

33 lines
1.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 功能描述:提供工作人员端鉴权地址构造与站内回跳地址校验。
// 版本1.0.0
/// 构造登录地址,并安全携带原目标页和会话失效原因。
String buildAuthLocation({
String? redirectTarget,
bool sessionExpired = false,
}) {
final safeTarget = sanitizeRedirectTarget(redirectTarget);
final query = <String, String>{
'redirect': ?safeTarget,
if (sessionExpired) 'reason': 'expired',
};
return Uri(
path: '/login',
queryParameters: query.isEmpty ? null : query,
).toString();
}
/// 只接受站内绝对路径,阻止外部地址和登录页形成重定向循环。
String? sanitizeRedirectTarget(String? value) {
final candidate = value?.trim() ?? '';
if (candidate.isEmpty) return null;
final uri = Uri.tryParse(candidate);
if (uri == null || uri.hasScheme || uri.hasAuthority || !uri.path.startsWith('/')) {
return null;
}
if (uri.path.startsWith('//') || uri.path.contains(r'\')) return null;
if (uri.path == '/login') return null;
return uri.toString();
}