nextjs中处理cookie

时间:2024-11-22 07:03:24

get处理后面加上搜索参数?action=set为设置cookie ?action=get为获取cookie

// app/api/user/route.js
import { NextResponse } from "next/server";

export async function GET(request) {
  const { searchParams } = new URL(request.url);
  const action = searchParams.get('action');
  // console.log(action);

  // 创建响应对象
  const response = NextResponse.json({ message: "Cookie action completed" });
  // 根据 action 参数来执行不同的操作
  if (action === "set") {
    console.log('action=set');
    // 设置 Cookie
    const token = 'your_jwt_token';
    response.cookies.set('token', token, {
      httpOnly: true, // 只能通过 HTTP 请求访问
      secure: process.env.NODE_ENV === 'production', // 仅在生产环境下使用 Secure
      sameSite: 'Strict', // 防止跨站请求伪造
      maxAge: 60 * 60 * 24, // 设置过期时间为 1 天
      path: '/',
    });
    // 设置完成后返回响应
    return response;
  }

  if (action === "get") {
    // 读取 Cookie
    const cookies = request.cookies;
    const token = cookies.get('token');
    if (token) {
      // 如果 token 存在,返回带有 token 的响应
    //   拿到token
      return NextResponse.json({token})
    } else {
      // 如果 token 不存在,返回错误信息
      return NextResponse.json({message:"token不存在"});
    }
  }
  if (action === "delete") {
    // 删除 Cookie
    response.cookies.set('token', '', { maxAge: 0 });
    // 返回删除后的响应
    return response;
  }

  // 如果没有匹配的 action 参数,默认返回消息
  return response;
}