Estoy probando SvelteKit y tengo dificultades con los ganchos. Los documentos realmente no parecen explicarlo muy bien. Mi comprensión actual de los ganchos es que básicamente le permiten interactuar con las solicitudes realizadas a su servidor antes de que lleguen a su destino. (Estoy abierto a una mejor explicación, específicamente el gancho del handle ). Mi problema actual es que hice un punto final llamado inicio de login . Como sugiere el nombre, permite a los usuarios iniciar sesión en mi aplicación generando un token y almacenándolo como una cookie en su cliente. Esto funciona hasta que agregue ganchos. Después de leer la descripción de los ganchos, pensé que el handle del gancho es perfecto para lo que quiero hacer: validar el token en cada solicitud; si no es válido, redirija al usuario a la pantalla de inicio de sesión; si es válido, permita que la solicitud continúe sin interrupciones.
export const handle: Handle = async ({ event, resolve }) => { const isLogin = event.url.pathname.startsWith('/login') const cookies = cookie.parse(event.request.headers.get('cookie') || ''); const token = cookies['token'] if (!token) { if (!isLogin) { return Response.redirect(`${event.url.origin}/login`) } return await resolve(event) } else { try { await verifyToken(token) if (isLogin) { return Response.redirect(`${event.url.origin}/about`) } } catch (err) { return Response.redirect(`${event.url.origin}/login`) } } return await resolve(event) }; Esto no funciona como se esperaba. Cuando inicio la solicitud al punto final de inicio de api/login , la solicitud no parece llegar allí. Tengo console.log s en todo el punto final, pero no se enviaron mensajes a la terminal y cuando revisé el almacenamiento de la aplicación, no se agregó ninguna cookie nueva.
¿Qué me estoy perdiendo de los ganchos? ¿Por qué no pasa la solicitud al punto final?
¿Alguna idea de cómo puedo arreglar esto?
El enlace de handle se ejecuta para cada solicitud, incluidos los puntos finales.
Cuando obtiene /api/login sin un token, su gancho redirigirá la solicitud a /login ya que isLogin === false . Debe permitir todas las rutas a las que se debe acceder sin iniciar sesión, por ejemplo:
const isLogin = /^\/(api\/)?login$/.test(event.url.pathname)