graph TD
A[接收登录请求] --> B{是否有重定向参数?}
B -->|是| C[存储重定向URL]
B -->|否| D[使用默认重定向]
C --> E[显示登录页面]
D --> E
E --> F[用户提交凭据]
F --> G[后端验证]
G --> H{有效?}
H -->|否| I[显示错误]
I --> E
H -->|是| J[生成/存储令牌]
J --> K{重定向URL存在?}
K -->|是| L{是外部链接?}
K -->|否| M[导航到仪表板]
L -->|是| N[将令牌附加到URL]
L -->|否| O[内部导航]
N --> P[window.location.href重定向]
O --> Q[router.push重定向]
M --> R[结束]
P --> R
Q --> R
sequenceDiagram
participant URL as 浏览器URL
participant Login as 登录页面
participant Auth as 认证服务
participant Store as 令牌存储
participant Redirect as 重定向处理器
URL->>Login: 加载 ?redirect=targetUrl
Login->>Login: 解析并存储重定向参数
Login->>Auth: 提交凭据
Auth->>Store: 保存令牌
Auth->>Login: 返回成功
Login->>Redirect: 使用存储的URL调用
Redirect->>Redirect: 检查是否为外部链接
Redirect->>Redirect: 使用令牌构建URL
Redirect->>URL: 执行重定向
第二部分:客户端系统(接入认证的业务系统)
依赖认证提供者完成用户身份验证的业务应用系统。
系统流程
graph TD
A[用户访问受保护路由] --> B{有有效令牌?}
B -->|是| C[允许访问]
B -->|否| D[构建认证提供者URL]
D --> E[将当前URL编码为重定向参数]
E --> F[重定向到认证提供者]
F --> G[用户在认证提供者完成登录]
G --> H[带令牌重定向回来]
H --> I{URL中有令牌?}
I -->|是| J[提取令牌]
I -->|否| K[再次重定向到登录]
J --> L[验证令牌]
L --> M{有效?}
M -->|是| N[本地存储令牌]
M -->|否| K
N --> O[从URL移除令牌]
O --> P[继续到请求的页面]
C --> Q[结束]
P --> Q
K --> Q