使用 Express 时,我曾经存储像 request.user 这样的用户:
import jwt from "jsonwebtoken";
import asyncHandler from "express-async-handler";
import User from "../models/userModel.js";
const protect = asyncHandler(async (req, res, next) => {
let token;
token = req.cookies.jwt;
if (token) {
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = await User.findById(decoded.userId).select("-password");
next();
} catch (error) {
res.status(401);
throw new Error("Not authorized , invalid token");
}
} else {
res.status(401);
throw new Error("Not authorized , no token");
}
});
export { protect };
And I was able to get the current user like this :
const createPost = asyncHandler(async (req, res) => {
const { content, image } = req.body;
const user = req.user;
但是如何使用 NextJS 13 API 路由和中间件以及如何使用 cookie 来做到这一点。 NextJS 的新手,因此我们将不胜感激。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
在 Next.js 中,您可以使用 NextRequest 和 NextResponse 上的 cookie 扩展来读取和操作 cookie。具体方法如下:
首先,您需要从 next/headers 导入 cookie:
import { cookies } from 'next/headers'然后,你可以得到这样的cookie:
const cookieStore = cookies() const token = cookieStore.get('token')要设置 cookie,您需要使用 Set-Cookie 标头返回一个新的响应:
return new Response('Hello, Next.js!', { status: 200, headers: { 'Set-Cookie': `token=${token}` }, })您还可以使用 NextRequest 对象来读取 cookie:
export async function GET(request) { const token = request.cookies.get('token') }对于传入的请求,cookie 具有以下方法:get、getAll、set 和 delete cookies。您可以使用 has 检查 cookie 是否存在,或使用clear 删除所有 cookie。
对于传出响应,cookie 具有以下方法 get、getAll、set 和 delete。
以下是如何使用这些方法的示例:
import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' export function middleware(request: NextRequest) { let cookie = request.cookies.get('nextjs') console.log(cookie) // => { name: 'nextjs', value: 'fast', Path: '/' } const allCookies = request.cookies.getAll() console.log(allCookies) // => [{ name: 'nextjs', value: 'fast' }] request.cookies.has('nextjs') // => true request.cookies.delete('nextjs') request.cookies.has('nextjs') // => false const response = NextResponse.next() response.cookies.set('vercel', 'fast') response.cookies.set({ name: 'vercel', value: 'fast', path: '/', }) cookie = response.cookies.get('vercel') console.log(cookie) // => { name: 'vercel', value: 'fast', Path: '/' } return response }