حسام
1 سال پیش توسط حسام مطرح شد
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 |     });

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