У меня проблема с отправкой токена JWT на сервер и его использованием для авторизации доступа в обработчиках load
. Я использую Firebase на клиенте для аутентификации. При входе в систему (onAuthStateChanged
) я отправляю POST
запрос с токеном в конечную точку /api/login
:
export async function post(req) {
const idToken = req.headers['authorization']
try {
const token = await firebase().auth().verifyIdToken(idToken)
req.locals.user = token.uid
} catch (e) {
console.log(e)
return {
status: 500,
body: 'forbidden',
}
}
return {
status: 200,
body: 'ok',
}
}
In hooks.js
:
export function getSession(request) {
return {
user: request.locals.user
}
}
export async function handle({ request, resolve }) {
const cookies = cookie.parse(request.headers.cookie || '')
request.locals.user = cookies.user
const response = await resolve(request)
response.headers['set-cookie'] = `user=${request.locals.user || ''}; Path=/; HttpOnly`
return response
}
В load
методах:
export async function load({ session }) {
if (!session.user) {
return {
status: 302,
redirect: '/start'
}
}
// ...
}
Все это работает нормально, за исключением того, что любая клиентская навигация после входа в систему отклоняется, потому что session.user
все еще не определен. При навигации путем ввода URL-адреса в браузере он работает правильно, а после этого также работает клиентская навигация.
Есть идеи, почему и что делать?