Jika pengesahan berjaya, NextJS ubah hala dari halaman log masuk ke halaman papan pemuka
P粉021854777
2023-08-13 10:56:17
<p>Dengan contoh ini, saya boleh mengubah hala nextjs ke halaman tertentu, seperti halaman log masuk, jika seseorang tidak disahkan. Walau bagaimanapun, bagaimana saya boleh mengubah suai ini supaya jika pengguna disahkan dan halaman itu adalah seperti halaman log masuk, ubah hala mereka ke papan pemuka atau halaman lain? Adakah terdapat konfigurasi yang boleh mencapai ini? Sesuatu seperti <code>matcher</code> akan mengekalkan URL peribadi dengan baik. Tetapi bagaimanakah saya boleh membetulkannya untuk URL awam tertentu yang saya tidak mahu pengguna akses semasa log masuk? Adakah ini mungkin? </p>
<pre class="brush:php;toolbar:false;">import { NextRequest, NextResponse } daripada 'next/server'
eksport middleware fungsi async(req: NextRequest, res: NextResponse) {
token const = req.headers.get('token') // TODO: Dapatkan token daripada pengepala permintaan
const userIsAuthenticated = false // TODO: Semak sama ada pengguna disahkan
console.log('middleware.ts', 'token', token);
jika (!userIsAuthenticated) {
const signinUrl = URL baharu('/log masuk', req.url)
kembalikan NextResponse.redirect(signinUrl)
}
kembalikan NextResponse.next()
}
// Di sini anda boleh menentukan semua laluan di mana fungsi middleware ini harus dijalankan
// Menyokong nilai rentetan tunggal atau tatasusunan padanan
eksport const config = {
pemadan: ['/api/auth/:path*', '/'],
}</pre>
Dengan mengandaikan anda menggunakan Next-Auth untuk mengesahkan:
Gunakan
withAuth
包装中间件,并使用Next-Auth提供的token变量验证会话,然后根据会话的有效性重定向到您希望的route
.Berikut ialah kod TS yang boleh membantu: