refactor: Simplify SSO authorization flow by removing OAuth parameter handling

This commit is contained in:
wood chen 2025-02-21 18:50:05 +08:00
parent a0026c005d
commit 4254098b53
3 changed files with 13 additions and 33 deletions

View File

@ -13,21 +13,8 @@ export async function POST(req: Request) {
try { try {
const nonce = WordArray.random(16).toString(); const nonce = WordArray.random(16).toString();
// 尝试从请求体中获取 OAuth 参数 // 设置基本的回调地址
let oauthParams = ""; const return_url = `${hostUrl}/authorize`;
try {
const body = await req.json();
if (body.oauth_params) {
oauthParams = body.oauth_params;
}
} catch (error) {
console.error("Failed to parse request body:", error);
}
// 设置回调地址,如果有 OAuth 参数则回到授权页面
const return_url = oauthParams
? `${hostUrl}/authorize?${oauthParams}`
: `${hostUrl}/dashboard`;
// 构建 SSO 参数 // 构建 SSO 参数
const ssoParams = new URLSearchParams(); const ssoParams = new URLSearchParams();

View File

@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { useRouter, useSearchParams } from "next/navigation"; import { useRouter } from "next/navigation";
import { Loader2, MessageCircleCode } from "lucide-react"; import { Loader2, MessageCircleCode } from "lucide-react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
@ -18,26 +18,17 @@ export function UserAuthForm({
}: React.HTMLAttributes<HTMLDivElement>) { }: React.HTMLAttributes<HTMLDivElement>) {
const [isLoading, setIsLoading] = React.useState<boolean>(false); const [isLoading, setIsLoading] = React.useState<boolean>(false);
const { toast } = useToast(); const { toast } = useToast();
const searchParams = useSearchParams();
const signIn = async () => { const signIn = async () => {
if (isLoading) return; if (isLoading) return;
setIsLoading(true); setIsLoading(true);
try { try {
// 构建请求体,包含 OAuth 参数
const body: Record<string, any> = {};
const currentParams = searchParams?.toString();
if (currentParams) {
body.oauth_params = currentParams;
}
const response = await fetch("/api/auth/q58", { const response = await fetch("/api/auth/q58", {
method: "POST", method: "POST",
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify(body),
}); });
if (!response.ok) { if (!response.ok) {

View File

@ -1,7 +1,7 @@
"use client"; "use client";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { useRouter, useSearchParams } from "next/navigation"; import { useRouter } from "next/navigation";
import { signIn } from "@/actions/user-authorize"; import { signIn } from "@/actions/user-authorize";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
@ -18,7 +18,6 @@ export function UserAuthorize({
const [isLoading, setIsLoading] = useState<boolean>(false); const [isLoading, setIsLoading] = useState<boolean>(false);
const [error, setError] = useState<Error | unknown>(null); const [error, setError] = useState<Error | unknown>(null);
const router = useRouter(); const router = useRouter();
const searchParams = useSearchParams();
const signInCallback = useCallback(async () => { const signInCallback = useCallback(async () => {
if (isLoading) { if (isLoading) {
@ -27,13 +26,12 @@ export function UserAuthorize({
setIsLoading(true); setIsLoading(true);
try { try {
// 从 URL 中获取 sso 和 sig 参数 // 从 URL 中获取 sso 和 sig 参数
const sso = searchParams?.get("sso"); const url = new URL(window.location.href);
const sig = searchParams?.get("sig"); const sso = url.searchParams.get("sso");
const sig = url.searchParams.get("sig");
if (!sso || !sig) { if (!sso || !sig) {
// 如果没有 SSO 参数,说明是 OAuth 流程,跳转到登录页 throw new Error("缺少必要的认证参数");
router.push(`/sign-in?${searchParams?.toString()}`);
return;
} }
// 传递 SSO 参数 // 传递 SSO 参数
@ -41,12 +39,16 @@ export function UserAuthorize({
sso, sso,
sig, sig,
}); });
// 登录成功后刷新路由状态
router.refresh();
setIsLoading(false);
} catch (error) { } catch (error) {
console.error("登录过程出错:", error); console.error("登录过程出错:", error);
setError(error); setError(error);
setIsLoading(false); setIsLoading(false);
} }
}, [isLoading, router, searchParams]); }, [isLoading, router]);
useEffect(() => { useEffect(() => {
signInCallback(); signInCallback();