حسام
6 روز پیش توسط حسام مطرح شد
0 پاسخ

ارور مادیفای کردن کوکی ها در نکست جی اس 15

من با اینکه توی یوز سرور کد زدم ولی باز این خطارو میگیرم و واقعا دیگه نمیدونم چطوری هندلش کنم

این محتویات فایل actions.tx من

'use server'

import { cookies } from 'next/headers';

export async function handleRefresh() {
const cookieStore = await cookies()
console.log('handleRefresh');

const refreshToken = await getRefreshToken();

const token = await fetch('http://localhost:8000/api/auth/token/refresh/', {
    method: 'POST',
    body: JSON.stringify({
        refresh: refreshToken
    }),
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
})
    .then(response => response.json())
    .then((json) => {
        console.log('Response - Refresh:', json);

        if (json.access) {

            cookieStore.set('session_access_token', json.access, {
                httpOnly: true,
                secure: false,
                maxAge: 60 * 60, // 60 minutes
                path: '/'
            });

            return json.access;
        } else {
            resetAuthCookies();
        }
    })
    .catch((error) => {
        console.log('error', error);

        resetAuthCookies();
    })

return token;
}

export async function handleLogin(userId: string, accessToken: string, refreshToken: string) {
const cookieStore = await cookies()
cookieStore.set('session_userid', userId, {
    httpOnly: true,
    secure: false,
    maxAge: 60 * 60 * 24 * 7, // One week
    path: '/'
});

cookieStore.set('session_access_token', accessToken, {
    httpOnly: true,
    secure: false,
    maxAge: 60 * 60, // 60 minutes
    path: '/'
});

cookieStore.set('session_refresh_token', refreshToken, {
    httpOnly: true,
    secure: false,
    maxAge: 60 * 60 * 24 * 7, // One week
    path: '/'
});
}

export async function resetAuthCookies() {
const cookieStore = await cookies();

cookieStore.set('session_userid', '', {
    expires: new Date(0), 
    path: '/',
});
cookieStore.set('session_access_token', '', {
    expires: new Date(0), 
    path: '/',
});
cookieStore.set('session_refresh_token', '', {
    expires: new Date(0), 
    path: '/',
});
}

//
// Get data

export async function getUserId() {
const cookieStore = await cookies()
const userId = cookieStore.get('session_userid')?.value
return userId ? userId : null
}

export async function getAccessToken() {
const cookieStore = await cookies()
let accessToken = cookieStore.get('session_access_token')?.value;

if (!accessToken) {
    accessToken = await handleRefresh();
}

return accessToken;
}

export async function getRefreshToken() {
const cookieStore = await cookies()
let refreshToken = cookieStore.get('session_refresh_token')?.value;

return refreshToken;
}

این محتویات دکمه لاگ اوت من که میخوام سشن رو پاک کنم همچنین یوزر آی دی رو که در بالا هست

'use client';

import  { useRouter } from 'next/navigation';
import { resetAuthCookies } from '../auth/route';  
import MenuLink from './navbar/MenuLink';

const LoggoutButton = () => {
    const router = useRouter()
    const logout = async() => {
        await resetAuthCookies()
        router.push('/')
    }

    return (
        <MenuLink
            onClick={logout}
            label="Logout"
        />
    )
}

export default LoggoutButton;

و این هم اروری که میگیرم


Error: Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options
    at resetAuthCookies (file://C%3A/Users/7Aseman-09/Desktop/clone/nextjs/djangobnb/app/actions.ts:77:16)
  75 |     const cookieStore = await cookies();
  76 |
> 77 |     cookieStore.set('session_userid', '', {
     |                ^
  78 |         expires: new Date(0),
  79 |         path: '/',
  80 |     });
 ⨯ unhandledRejection: Error: Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options
    at resetAuthCookies (file://C%3A/Users/7Aseman-09/Desktop/clone/nextjs/djangobnb/app/actions.ts:77:16)
  75 |     const cookieStore = await cookies();
  76 |
> 77 |     cookieStore.set('session_userid', '', {
     |                ^
  78 |         expires: new Date(0),
  79 |         path: '/',
  80 |     });
 ⨯ unhandledRejection:  Error: Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options
    at resetAuthCookies (file://C%3A/Users/7Aseman-09/Desktop/clone/nextjs/djangobnb/app/actions.ts:77:16)
  75 |     const cookieStore = await cookies();
  76 |
> 77 |     cookieStore.set('session_userid', '', {
     |                ^
  78 |         expires: new Date(0),
  79 |         path: '/',
  80 |     });

البته لاگین و لاگ اوت من داره درست کار میکنه و کدهام درست کار میکنن فقط این ارور در اررو باکس پایین سمت چپ صفحه نشون داده میشه و همچنین در ترمینال وگرنه هم لاگ این و هم لاگ اوت درست کار میکنن و مشکلی ندارن
مشکل چی هست که این ارور رو من میبینم


ثبت پرسش جدید

به همدیگه کمک کنیم

به حسام کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام