mirror of
https://github.com/woodchen-ink/Q58Connect.git
synced 2025-07-18 14:01:55 +08:00
refactor: 重构用户授权流程,简化 OAuth 和 SSO 重定向逻辑
This commit is contained in:
parent
6c8bda6b32
commit
f9c912e8c5
@ -4,27 +4,26 @@ import { redirect } from "next/navigation";
|
|||||||
import { signIn as nextSignIn } from "@/auth";
|
import { signIn as nextSignIn } from "@/auth";
|
||||||
|
|
||||||
export async function signIn(data: Record<string, any>) {
|
export async function signIn(data: Record<string, any>) {
|
||||||
const { sso, sig, oauth } = data;
|
const { sso, sig, returnTo } = data;
|
||||||
|
|
||||||
// 先进行 SSO 登录
|
// 先进行 SSO 登录
|
||||||
await nextSignIn("credentials", { sso, sig });
|
await nextSignIn("credentials", { sso, sig });
|
||||||
|
|
||||||
// 如果有 OAuth 参数,重定向到 OAuth 授权页面
|
// 从 sso 参数中获取 return_sso_url
|
||||||
if (oauth) {
|
|
||||||
const oauthParams = new URLSearchParams(atob(oauth));
|
|
||||||
if (oauthParams.has("client_id")) {
|
|
||||||
const authUrl = `/oauth/authorize?${oauthParams.toString()}`;
|
|
||||||
redirect(authUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果没有 OAuth 参数,从 SSO 参数中获取 return_sso_url
|
|
||||||
const params = new URLSearchParams(atob(sso));
|
const params = new URLSearchParams(atob(sso));
|
||||||
const returnUrl = params.get("return_sso_url");
|
const returnSsoUrl = params.get("return_sso_url");
|
||||||
|
|
||||||
if (!returnUrl) {
|
if (!returnSsoUrl) {
|
||||||
redirect("/dashboard");
|
// 如果没有 return_sso_url,检查是否有 OAuth 参数
|
||||||
} else {
|
const searchParams = new URLSearchParams(returnTo);
|
||||||
redirect(returnUrl);
|
if (searchParams.has("client_id")) {
|
||||||
|
// 如果是 OAuth 流程,重定向到授权页面
|
||||||
|
redirect(`/oauth/authorize${returnTo}`);
|
||||||
}
|
}
|
||||||
|
// 如果都没有,重定向到仪表板
|
||||||
|
redirect("/dashboard");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果有 return_sso_url,重定向回 SSO 提供者
|
||||||
|
redirect(returnSsoUrl);
|
||||||
}
|
}
|
||||||
|
@ -32,20 +32,11 @@ export function UserAuthorize({
|
|||||||
throw new Error("缺少必要的认证参数");
|
throw new Error("缺少必要的认证参数");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取原始的 OAuth 参数
|
// 传递 SSO 参数和原始的 search 参数
|
||||||
const originalOAuthParams = new URLSearchParams(window.location.search);
|
|
||||||
const oauthData: Record<string, string> = {};
|
|
||||||
Array.from(originalOAuthParams.entries())
|
|
||||||
.filter(([key]) => key !== "sso" && key !== "sig")
|
|
||||||
.forEach(([key, value]) => {
|
|
||||||
oauthData[key] = value;
|
|
||||||
});
|
|
||||||
|
|
||||||
// 传递 SSO 参数和原始的 OAuth 参数
|
|
||||||
await signIn({
|
await signIn({
|
||||||
sso,
|
sso,
|
||||||
sig,
|
sig,
|
||||||
oauth: btoa(originalOAuthParams.toString()),
|
returnTo: url.search, // 保存完整的查询参数
|
||||||
});
|
});
|
||||||
|
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user