提问人:Pedro Schinke 提问时间:11/14/2023 更新时间:11/14/2023 访问量:14
尝试使用 Node.js 和 Fastify 提取请求中的用户数据时出现问题
Problem when trying to extract user data in a request with Node.js and Fastify
问:
我正在编写一个饮食控制代码,我想对用户进行身份验证,以便他们只能访问他们注册的膳食。首先,我尝试注册第一餐,但我只得到“禁止”,因为userId返回undefined
代码如下:
interface UserPayload {
userId: string
}
interface CustomRequest extends FastifyRequest {
user?: UserPayload
}
export async function mealsRoutes(app: FastifyInstance) {
app.addHook(
'onRequest',
async (request: CustomRequest, reply: FastifyReply) => {
const authHeader = request.headers.authorization
const token = authHeader && authHeader.split(' ')[1]
if (!token) {
reply.code(401).send({
error: 'Unauthorized',
})
return
}
try {
const decoded = jwt.verify(token, env.JWT_SECRET) as UserPayload
request.user = decoded
} catch (err) {
reply.status(403).send({
error: 'Forbidden',
})
}
}
)
app.post('/', async (request: CustomRequest, reply) => {
const createMealBodySchema = z.object({
title: z.string(),
description: z.string(),
hourOfMeal: z.number().min(0).max(23),
minuteOfMeal: z.number().min(0).max(59),
onDiet: z.enum(['Sim', 'Não']),
})
const userId = request.user?.userId
console.log(userId) //undefined
if (!userId) {
return reply.status(403).send({
error: 'Forbidden',
})
}
const { title, description, hourOfMeal, minuteOfMeal, onDiet } =
createMealBodySchema.parse(request.body)
await knex('meals').insert({
id: randomUUID(),
title,
description,
hourOfMeal,
minuteOfMeal,
onDiet,
userId,
})
return reply
.status(201)
.send({ message: 'Success!' })
})
如何解决此问题,以便它返回用户 ID,并且可以将其添加到餐食中?
答: 暂无答案
评论