Всем привет. Мне нужна ваша помощь. У меня фрондентд веб-приложения на Nextjs 14, а бекеенд на nodejs, который устанавливает http-only jwt cookie в headers, когда пользователь входит в приложение. Затем у меня есть функция getMe() в middleware, которая получает информацию о профиле. Если только http установлен правильно, getMe() отправляет тип ответа «success», если нет, выдает ошибку. Затем я проверяю, если все прошло успешно, пользователь может получить доступ к своему профилю, если нет, middleware должно перенаправить его на страницу входа.
Проблема в том, что ответ функции getMe в middleware дает мне null. Но когда я тестирую это, просто копирую и вставляю URL-адрес в браузер, все работает. Можете ли вы помочь мне с этой проблемой? Вот код, который я предоставил ниже:
import { apiUrl } from '@/constants/apiUrl';
import { User, UserData } from '@/types/auth';
import { typedFetchJSON } from '@/utils/typedFetch';
export function signIn(username: string, password: string) {
return typedFetchJSON(`${apiUrl}/user/signin`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
credentials: 'include',
body: JSON.stringify({ username, password }),
});
}
export function getMe() {
return typedFetchJSON<User>(`${apiUrl}/user/me`, {
credentials: 'include',
});
}
import { createI18nMiddleware } from 'next-international/middleware';
import { NextRequest, NextResponse } from 'next/server';
import { getMe } from './api/auth';
const locales = ['ru', 'tm', 'en', 'tr'];
const I18nMiddleware = createI18nMiddleware({
locales,
defaultLocale: 'ru',
});
export async function middleware(request: NextRequest) {
const protectedPaths = ['/profile', '/add-ads'];
if (protectedPaths.includes(request.nextUrl.pathname.slice(3))) {
try {
const response = await getMe();
if (response?.type !== 'success') {
console.log('response getMe');
return NextResponse.redirect(new URL('/sign-in', request.url));
}
} catch (error) {
console.error('Failed to fetch user profile:', error);
}
}
return I18nMiddleware(request);
}
export const config = {
matcher: [
'/((?!api|static|.*\\..*|_next|favicon.ico|robots.txt|serviceworker.js).*)',
],
};