From 248a01042f6f201c05019dd3224b210edbd54d5c Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 01:36:59 +0300 Subject: [PATCH] =?UTF-8?q?fix(giris):=20callback=20yaln=C4=B1z=20better-a?= =?UTF-8?q?uth'un=20kabul=20etti=C4=9Fi=20yollarda=20tak=C4=B1l=C4=B1r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit better-auth 1.6.23 callback'i kendi göreli-yol kalkanından geçiriyor ve \w ASCII olduğu için /rehber/ösym ya da /bolum/t%C4%B1p gibi yolları 403 INVALID_CALLBACK_URL ile reddediyordu: kullanıcı o sayfalardan hiç giriş yapamıyordu. Callback artık yalnız auth'un da kabul edeceği yollarda takılıyor, gerisinde sade /giris'e düşülüyor. Co-Authored-By: Claude Opus 5 --- src/features/kullanici/components/giris-linki.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/features/kullanici/components/giris-linki.tsx b/src/features/kullanici/components/giris-linki.tsx index c9b9358..ccdbc75 100644 --- a/src/features/kullanici/components/giris-linki.tsx +++ b/src/features/kullanici/components/giris-linki.tsx @@ -21,11 +21,23 @@ import { Button } from "@/components/ui/button"; * ediliyor — cacheComponents açıkken dinamik parametreli rotalarda gereken * sınır hazır (next/dist/docs/.../use-pathname.md). */ +/** + * better-auth (1.6.23) callback'i kendi göreli-yol kalkanından geçiriyor: + * `^\/(?!\/|\\|%2f|%5c)[\w\-.+/@]*(?:\?…)?$`. `\w` ASCII olduğu için + * `/rehber/ösym` ya da yüzde-kodlanmış `/bolum/t%C4%B1p` gibi yollar + * **403 INVALID_CALLBACK_URL** ile reddediliyor ve kullanıcı o sayfadan hiç + * giriş yapamıyor (main'de callback hep "/" olduğu için bu yol yoktu). + * Bu yüzden callback'i ancak auth katmanının da kabul edeceği yollarda + * takıyoruz; gerisinde sade /giris'e düşüyoruz — bağlam kaybı, kırık giriş + * akışına yeğdir. Kalkan daraltılırsa (tek yer) buradaki de gevşetilebilir. + */ +const AUTH_GUVENLI_YOL = /^\/(?!\/|\\)[\w\-./+@]*$/; + export function GirisLinki() { const pathname = usePathname(); // /giris kendine callback veremez (döngü); pathname yoksa sade hedef. const href = - pathname && !pathname.startsWith("/giris") + pathname && !pathname.startsWith("/giris") && AUTH_GUVENLI_YOL.test(pathname) ? `/giris?callback=${encodeURIComponent(pathname)}` : "/giris";