我正在尝试将一个对象从端点传递给 getSession
,我相信它们都在服务器中运行。我可以得到用 cookie 传递的值,但不能得到用 request.locals.<variable>
传递的值:
src/hooks.ts
:
import cookie from 'cookie'
export async function handle({request, resolve}) {
const cookies = cookie.parse(request.headers.cookie || '')
request.locals.accessToken = cookies.accessToken
request.locals.refreshToken = cookies.refreshToken
const response = await resolve(request)
const accessToken = `accessToken=${request.locals.accessToken || ''}; Path=/; Secure; HttpOnly;`
const refreshToken = `refreshToken=${request.locals.refreshToken || ''}; Path=/; Secure; HttpOnly;`
response.headers['set-cookie'] = [accessToken, refreshToken]
return response
}
export async function getSession(request) {
console.log('check request local', request.locals)
return {
accessToken: request.locals.accessToken,
refreshToken: request.locals.refreshToken,
user: request.locals.user
}
}
我的端点:
export const post: RequestHandler<Locals, FormData> = async(req) => {
const name = req.body.get("name")
const password = req.body.get("password")
if (!name || !password) {
return {
status: 400,
body: {
message: "Missing username or password"
}
}
}
const { access_token, refresh_token } = await getAccessToken(name, password)
req.locals.accessToken = access_token
req.locals.refreshToken = refresh_token
const user = await getUser(access_token)
req.locals.user = user
return {
status: 302,
headers: {
location: '/lobby'
}
}
}
如果我想将带有 getUser
的数据传递给 handle
,我应该在 request.locals
中运行 getSession
吗?
编辑
我实际上能够在 request.locals.user
之后获得 const response = await resolve(request)
的值,但不能在 resolve
之前获得。这是为什么?
我将数据从端点传递到
getSession
,并在handle
函数中设置一个cookie,如前所述: