recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser le routage API dans NextJS 13

Lorsque j'utilisais Express, j'avais l'habitude de stocker les utilisateurs comme 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;

Mais comment faire cela en utilisant le routage et le middleware de l'API NextJS 13 et comment utiliser les cookies. Nouveau sur NextJS, toute aide serait grandement appréciée.

P粉903969231P粉903969231446 Il y a quelques jours652

répondre à tous(1)je répondrai

  • P粉176980522

    P粉1769805222023-09-08 00:18:14

    Dans Next.js, vous pouvez utiliser les extensions de cookies sur NextRequest et NextResponse pour lire et manipuler les cookies. La méthode spécifique est la suivante :

    Tout d'abord, vous devez importer les cookies depuis next/headers :

    import { cookies } from 'next/headers'

    Ensuite, vous pouvez obtenir un cookie comme celui-ci :

    const cookieStore = cookies()
    const token = cookieStore.get('token')

    Pour définir un cookie, vous devez renvoyer une nouvelle réponse en utilisant l'en-tête Set-Cookie :

    return new Response('Hello, Next.js!', {
      status: 200,
      headers: { 'Set-Cookie': `token=${token}` },
    })

    Vous pouvez également utiliser l'objet NextRequest pour lire les cookies :

    export async function GET(request) {
      const token = request.cookies.get('token')
    }

    Pour les demandes entrantes, les cookies ont les méthodes suivantes : get, getAll, set et delete cookies. Vous pouvez utiliser a pour vérifier si un cookie existe, ou effacer pour supprimer tous les cookies.

    Pour les réponses sortantes, le cookie dispose des méthodes suivantes get, getAll, set et delete.

    Voici des exemples d'utilisation de ces méthodes :

    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
    }

    répondre
    0
  • Annulerrépondre