我在向服务器发送 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',
}
}
在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 进行导航时,它可以正常工作,之后客户端导航也可以工作。
任何想法为什么和做什么?