Я создаю приложение с помощью Next.js 14 и столкнулся с проблемой управления файлами cookie в моем промежуточном программном обеспечении. Цель – выполнить внешний вызов API для проверки токена пользователя. Если проверка не удалась (это означает, что токен недействителен), я хочу удалить определенный файл cookie, поскольку он указывает на то, что сеанс истек или недействителен.
Я реализовал функцию промежуточного программного обеспечения, которая вначале запускаетverifyUser для проверки токена. Если токен недействителен, я пытаюсь удалить файл cookie с помощью функции removeUser. Однако файл cookie не удаляется должным образом.
Вот соответствующий фрагмент кода для моего промежуточного программного обеспечения:
import { NextResponse } from 'next/server';
import { verifyUser } from '@/lib';
export async function middleware(request) {
await verifyUser(request)
// Middleware logic here to proctect pages
}
export const config = {
matcher: [
'/',
'/dashboard',
'/login',
],
}
А вот функцияverifyUser вместе с функцией removeUser, которая пытается удалить файл cookie:
export async function verifyUser(request) {
// API call and token validation logic
if (!data.success) {
console.info('unsuccessful');
removeUser();
}
}
function removeUser() {
const response = NextResponse.next();
response.cookies.set({
name: 'netlify',
value: '',
expires: new Date(0),
})
return response;
}
Мои вопросы:
Будем очень признательны за любые рекомендации или предложения по решению этой проблемы.
🤔 А знаете ли вы, что...
React Hooks - это механизм, введенный в React 16.8, для управления состоянием компонентов функциональным способом.
Как я могу правильно удалить файл cookie из функции промежуточного программного обеспечения в Next.js 14, когда внешний API указывает, что токен пользователя недействителен?
Вы можете использовать метод .delete(key)
:
function removeUser() {
const response = NextResponse.next();
response.cookies.delete('netlify')
return response;
}
Полезно знать: удалять файлы cookie можно только в действии сервера или обработчике маршрута.
https://nextjs.org/docs/app/api-reference/functions/cookies