fix: 合并 exchange+login 为一步,直接从 jumpToken 响应提取用户信息签发JWT
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -70,32 +70,19 @@ export default function AuthProvider({ children }: { children: ReactNode }) {
|
||||
}
|
||||
|
||||
try {
|
||||
// 3. 通过后端代理交换 jumpToken
|
||||
const exchangeRes = await fetch(`${AUTH_API}/exchange?jumpToken=${encodeURIComponent(jumpToken)}`);
|
||||
const exchangeData = await exchangeRes.json();
|
||||
// 3. 一步完成:jumpToken → 用户信息 + JWT
|
||||
const res = await fetch(`${AUTH_API}/exchange?jumpToken=${encodeURIComponent(jumpToken)}`);
|
||||
const data = await res.json();
|
||||
|
||||
if (!exchangeRes.ok || !exchangeData.token) {
|
||||
setState({ isLoading: false, isAuthenticated: false, user: null, error: '跳转令牌无效或已过期' });
|
||||
if (!res.ok || !data.token) {
|
||||
setState({ isLoading: false, isAuthenticated: false, user: null, error: data.message || '跳转令牌无效或已过期' });
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. 用 sessionToken 登录获取 JWT
|
||||
const loginRes = await fetch(`${AUTH_API}/login`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ token: exchangeData.token }),
|
||||
});
|
||||
const loginData = await loginRes.json();
|
||||
|
||||
if (!loginRes.ok || !loginData.token) {
|
||||
setState({ isLoading: false, isAuthenticated: false, user: null, error: '获取用户信息失败' });
|
||||
return;
|
||||
}
|
||||
|
||||
// 5. 存储 JWT
|
||||
tokenRef.current = loginData.token;
|
||||
sessionStorage.setItem('bi_jwt', loginData.token);
|
||||
sessionStorage.setItem('bi_user', JSON.stringify(loginData.user));
|
||||
// 4. 存储 JWT
|
||||
tokenRef.current = data.token;
|
||||
sessionStorage.setItem('bi_jwt', data.token);
|
||||
sessionStorage.setItem('bi_user', JSON.stringify(data.user));
|
||||
|
||||
// 6. 清除 URL 中的 jumpToken
|
||||
params.delete('jumpToken');
|
||||
@@ -107,7 +94,7 @@ export default function AuthProvider({ children }: { children: ReactNode }) {
|
||||
setState({
|
||||
isLoading: false,
|
||||
isAuthenticated: true,
|
||||
user: loginData.user,
|
||||
user: data.user,
|
||||
error: null,
|
||||
});
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user