From ccfd92371fb074a1f58a76dc628cb586080a43aa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:58:56 +0000 Subject: [PATCH] =?UTF-8?q?fix(auth):=20header=20"Sign=20In"=20=E8=B7=B3?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=80=89=E6=8B=A9=E9=A1=B5=E8=80=8C=E9=9D=9E?= =?UTF-8?q?=E7=9B=B4=E5=A5=94=20GitHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #382 把 GitHub/Discord 两个按钮放在了 /login 页,但 header 的 "Sign In" (AuthNav 里 无 provider)仍直跳 /oauth/render/github, 用户点了就直奔 GitHub、根本看不到 Discord 选项。 改:SignInButton 不传 provider 时跳 /login 选择页;登录页两个按钮传了 provider 仍直跳对应授权。header 无 props 调用自动获得"先选后登"。 --- app/components/SignInButton.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/components/SignInButton.tsx b/app/components/SignInButton.tsx index 0086f5a..64bf3bd 100644 --- a/app/components/SignInButton.tsx +++ b/app/components/SignInButton.tsx @@ -4,21 +4,21 @@ import { Button } from "@/app/components/ui/button"; interface SignInButtonProps { className?: string; - // 默认 github(header 处无 props 调用不变);登录页可传 discord。 + // 传了 provider(登录页两个按钮)→ 直跳该 provider 授权; + // 不传(header 的 "Sign In")→ 跳 /login 让用户在 GitHub / Discord 间选。 provider?: "github" | "discord"; label?: string; } export function SignInButton({ className, - provider = "github", + provider, label = "SignIn", }: SignInButtonProps) { - // 同源跳到 /oauth/render/{provider},经 next.config.mjs 的 rewrite 代理到后端。 - // 好处:开发环境后端端口改来改去都不用改前端;302 由 Next.js 透传给浏览器, - // 最终跳到 provider 授权页。各 provider 的 OAuth app 回调 URL 决定返回的前端地址。 + // provider 已定:同源跳 /oauth/render/{provider},经 next.config rewrite 代理到后端。 + // provider 未定:跳 /login 选择页(middleware 会补 locale 前缀)。 const handleSignIn = () => { - window.location.href = `/oauth/render/${provider}`; + window.location.href = provider ? `/oauth/render/${provider}` : "/login"; }; return ( @@ -30,7 +30,7 @@ export function SignInButton({ data-umami-event="auth_click" data-umami-event-action="signin" data-umami-event-location="header" - data-umami-event-provider={provider} + data-umami-event-provider={provider ?? "choose"} > {label}