سلام دوستان خسته نباشید
ببخشید یکم سوال طولانی میشه اما سعی میکنم کامل بگم
مشکل من دریافت توکنی هست که در front ایجاد شده توسط next و node و از طریق هدر درخواست ها توسط axios به api من که یک پروژه لاراولی هست ارسال شده .
توکن بنده به صورت httpOnly هست و به همین دلیل نیاز هست که credentials در axios فعال بشه و در بک اند هم همینطور به همراه CORS تنظیمات مربوطه
من کد های خودم رو قرار میدم ببینید کجای کار اشتباه هست .
بخش تنظیمات ارسال داده ی من که مربوط به axios هست :
const callApi = () => {
const axiosInstance = axios.create({
baseURL : 'http://localhost:8000/api'
})
axiosInstance.interceptors.request.use(
(config) => {
config.withCredentials = true;
return config;
},
err => { throw err }
)
axiosInstance.interceptors.response.use(
res => {
return res;
},
err => {
const res = err?.response
if(res) {
if(res.status === 422) {
throw new ValidationError(res.data.errors)
}
}
throw err;
}
)
return axiosInstance;
}
ارتباط با api :
const { data , error } = useSWR('auth_user' , () => {
return callApi().post('/auth/user')
})
تنظیمات config>cors لاراول :
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
میدلور cors هم طبق چیزایی که توی اینترنت دیدم ایجاد کردم و origin های مربوطه رو اجازه دسترسی رو دادم بهش :
public function handle(Request $request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
داخل کرنل هم اضاف کردمش :
'cors'=> \App\Http\Middleware\Cors::class,
یه بخشی هم توی middlewareGroup استاد موسوی فرمودند از کامنت خارج کنم ولی من از sanctum استفاده نمیکنم با این حال :
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
روت مربوطه :
Route::post('/api/auth/user',[\App\Http\Controllers\Admin\LoginActivityContoller::class,'user'])->middleware('cors');
کد داخل کنترلر که نیاز به دریافت کوکی دارم :
public function user(Request $request)
{
// return Cookie::get();
return $request->cookie();
}
کوکی من ساخته شده هست و داخل network مرورگر قابل مشاهده هست اما توی سرور داده ی null داره و کوکی های دیکه هم value اون ها کامل نیست و انگار مقدار کوکی ها اصلا نمیره سمت سرور
ارتباط با روت ایجاد شده دارم مشکل ارتباط نیست داده میره و میاد اما کوکی نمیتونم دریافت کنم
لطفا راهنمایی بفرمایید.
سلام دوستان
مشکل این بود که داخل فایل web روت خودم رو ایجاد کرده بودم و باید در api ایجاد میکردم مشکل برطرف شد
سلام خوبین @salar.mohammad2013
ببخشین امکانش هست که کدهای ورود nextjs و laravel رو ارسال کنین تقریبا چند روزه هرچی تلاش میکنم نمیتونم کاربرو داخل سایت لاگین کنم. یعنی کاربرو میتونم وارد سایت کنم و بهم true میده، اما در زمانی که اطلاعات کاربرو میخوام دریافت کنم همیشه null میده، خودم فکر میکنم که بخاطر اینه که nextjs کوکی ها رو ارسال نمیکنه:
لطفا اگر امکانش هست راهنماییم کنید شدیدا به کمک نیاز دارم
@abolfazlRamshini
سلام
کوکی که ارسالی نیست هدر درخواست تغییر میکنه و مثلا میتونی بگی ارسال نشده چیزی باهاش
کوکی توی یه دامنه قابل دسترسه و تنظیمی داره که ساب دامین و زیر دامنه ها در واقع بتونن بهش دسترسی داشته باشن
موقع ایجاد کوکی توی نکست اگر هست قبل دامنه باید یک نقطه یا همون دات قرار بدی که یعنی زیر دامنه ها هم استفاده کنن ازش
دلیلشم اینه که بکند از فرانت جدا شده دیگه مشکلت اینه
من از httpOnly کوکی استفاده میکنم اما توی لاراول از sanctum استفاده میکنم اون هدری میخاد با توکنی به نام barber باز یه میدلور تعریف کردم توی لاراول که کوکی رو میچسبونه به هدر درخواست ها
اگر این شیوه پیاده سازی مد نظرته بگو کجای کار گیر داری و مشکلت چیه ولی من حدس میزنم سر دامنه و ثبت کوکی مشکل داری که میگی کوکی ارسال نمیشه
چون اصلا ارسالی نیست کوکی
هر دامنه و زیر دامنه برا خودشون کوکی های خودشونو دارن و قابل دسترس هست اگر بگی قابل دسترس باشن برای هم دیگه
منم دقیقا از sanctum استفاده میکنم و حتی زمانی که توکن رو هم ارسال میکنم با نکست هیچ تاثیری نداره، و اصلا نمیدونم باید چیکار کنم
@abolfazlRamshini
فایل هاش و کانفیگش یک بخش نیست که
هم سمت لاراول
هم میدلورش
هم cors و کانفیگاش هست
سمت نکس هم همینطور
اگر به صورت پروژه میخوایی برون سپاری کنی برات جفتش خام ایجاد کنم مجدد کامنت کنم بفرستم بگو تلگرام بدم اگر نه یه پرسش جدید ایجاد کن راکت همه فایل ها و بخش های کاری که کردی بزار ببینیم کجای کار ایراد داره اگر شد راهنمایی کنیم ،
نمیتونم همه ی بخش ها رو ارسال کنم متاسفانه اینجا
@abolfazlRamshini
انتخاب شماست عزیز ، تلگرام براتون پروژه شخصی انجام میدم چون زمان بر هست کار
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟