Skip to content

Commit 74daf33

Browse files
committed
Giriş formunu istemci yönlendiricisinden çıkar
`BaseLayout` bir `ClientRouter` kuruyor ve sayfadaki form gönderimlerini kendi `fetch`'ine alıyor. Oturum formlarının cevabı sayfaya basılacak bir HTML değil, Orbit'e giden cross-origin 303. Yönlendirici onu taşıyamayınca gönderimi aynı adrese GET olarak düşürüyordu; `/giris/orbit` yalnız POST tanıdığı için ziyaretçi 404 görüyordu. Sunucu tarafı bu sırada doğruydu — curl ile 303 ölçülüyordu. Kırılan katman istemci yönlendiricisiydi, ve doğrulamamı sunucuya bakarak yaptığım için göremedim. `data-astro-reload` gönderimi tarayıcının kendi navigasyonuna bırakıyor. GET artık 404 değil 405 dönüyor: adres var, yöntem yanlış. 404 bu teşhisi yanlış yöne çekmişti.
1 parent af30111 commit 74daf33

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

‎src/components/OturumDugmesi.astro‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,30 @@ if (veritabani) {
3535
const donus = Astro.url.pathname + Astro.url.search;
3636
---
3737

38+
39+
/* `data-astro-reload` KALDIRILAMAZ.
40+
*
41+
* `BaseLayout` bir `ClientRouter` (Astro view transitions) kuruyor ve o
42+
* yönlendirici sayfadaki form gönderimlerini kendi `fetch`'ine alıyor.
43+
* Buradaki iki form da cevabı sayfaya basılacak bir HTML değil, BAŞKA BİR
44+
* KAYNAĞA giden 303 yönlendirmesi döndürüyor. İstemci yönlendiricisi
45+
* cross-origin yönlendirmeyi taşıyamıyor ve gönderimi aynı adrese GET
46+
* olarak düşürüyor; `/giris/orbit` yalnız POST tanıdığı için ziyaretçi
47+
* 404 görüyor. Sunucu tarafı bu sırada tamamen doğru çalışıyordu — curl
48+
* ile 303 ölçülüyordu, tarayıcıda 404 çıkıyordu.
49+
*
50+
* Bu öznitelik yönlendiriciye "bu gönderime karışma" diyor: tarayıcı kendi
51+
* navigasyonunu yapıyor, 303 normal şekilde izleniyor. */
3852
{okuyucu && (
39-
<form class="oturum" method="POST" action="/cikis">
53+
<form class="oturum" method="POST" action="/cikis" data-astro-reload>
4054
<span class="oturum-ad" title={okuyucu.displayName ?? 'Orbit hesabı'}>
4155
{okuyucu.displayName ?? 'Hesabım'}
4256
</span>
4357
<button type="submit" class="oturum-dugme">Çıkış</button>
4458
</form>
4559
)}
4660
{!okuyucu && girisAcik && (
47-
<form class="oturum" method="POST" action="/giris/orbit">
61+
<form class="oturum" method="POST" action="/giris/orbit" data-astro-reload>
4862
<input type="hidden" name="donus" value={donus} />
4963
<button type="submit" class="oturum-dugme">Orbit ile giriş</button>
5064
</form>

‎src/server/routes/giris.ts‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,14 @@ export const POST: APIRoute = async ({ request }) => {
6969
},
7070
});
7171
};
72+
73+
/* GET bilerek desteklenmiyor (yukarıdaki gerekçe), ama 404 yerine 405
74+
* dönüyor: 404 "böyle bir sayfa yok" demek ve bu bir kez teşhisi saatlerce
75+
* yanlış yöne çekti — rota canlıda çalışıyorken istemci yönlendiricisi
76+
* gönderimi GET'e düşürmüştü. 405 doğru cümleyi kuruyor: adres var, yöntem
77+
* yanlış. */
78+
export const GET: APIRoute = () =>
79+
new Response('Bu adres yalnız POST kabul ediyor; girişi sayfadaki düğmeden başlat.', {
80+
status: 405,
81+
headers: { allow: 'POST', 'cache-control': 'no-store' },
82+
});

0 commit comments

Comments
 (0)