سلام دوستان
من متوجه شدم که باید برای صفحه هایی که متدشون GET هست
و نیازه که توکن از کوکی گرفته بشه و به بکند فرستاده بشه از header استفاده بشه
پس کد زیر رو پیدا کردم
$.ajax({
url: "http://localhost:8000/api/customers",
data: {
access_token: getCookie("access_token")
},
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', getCookie("access_token"));
}
});
خب مشکلی نداره و ظاهرا کار میکنه اما من چجوری میتونم توی بکند get کنم؟
بِسْمِ ٱلْلّٰهِ ٱلْرَّحْمٰنِ ٱلْرَّحِیْم
ٱلْحَمْدُ لِلّٰهِ
سلام اگه منظورت توی لاراوله که با request میشه و متد header
$request->header('Header-Key', 'default value');
اینجا رو یک نگاهی بکن:
https://laravel.com/docs/9.x/requests#request-headers
خیلی ممنون @abol313
من از hasHeader استفاده کردم ولی اون قسمتی داخل hasHeader بود اصلا اجرا نشد!
نمیدونم دلیلیش چیه
کد فرانتندمم فکر نکنم مشکلی داشته باشه اما نمیدونم چرا اجرا نمیشه؟؟
اصلا برای فرستادن توکن از صفحه ای که متدش GET هست به میدلویر استفاده کردن از header درسته؟
چطوری از hasHeader استفاده کردی؟
و اینکه توی پروتکل http فکرکنم هر متدی یا فعل http مثل get، post، put، patch، delete، options
می تونه هدر خودشو داشته باشه
مثل
Content-Type:application/json
Accept:application/json
و...
و همین طور منظورت از
ولی اون قسمتی داخل hasHeader بود اصلا اجرا نشد!
چیست؟
@abol313 اینطوریه که من یه سیستم درست کردم که وقتی ادمین لاگین میکنه براش یه توکن اپدیت میشه و توکنش فرستاده میشه توی کوکی که من بتونم اون کوکی رو از صفحه های مختلف بگیرم و هر بار ادمین بخواد یه عملیاتی انجام بده مثلا میخواد یه مشتری حذف کنه من اون توکن رو همراه اطلاعاتی که ادمین با حذف کردن کاربر سمت بکند فرستاده میشه میفرستم یعنی post میکنم. چون عملیات حذف متدش post هست و من کوکی رو توی data json میزارم و post میکنم و چون توی روت های بکند میدیلور تعریف کردم پس اول میره سراغ کد های میدلویر و توی مدیلور گفتم که اگر همچین توکنی وجود داشت بزار کاربر رو حذف کنه و اگر وجود نداشت بفرستش به صفحه لاگین.
حالا مشکل من اینه که برای صفحه هایی که متدشون post نیست و GET هست چیکار کنم که یک نفر گفت باید توکن رو بفرستی توی هدر
منم گشتم دنبال کدش درستش کردم و بنظرم کار میکنه و مشکل دیگه دریافت هدر توی میدیلور هست چون توکن من توی هدر هست پس یه قسمت دیگه هم توی کلاس میدیلور دارم که میگه یا اطلاعات با POST میان یا اینکه از توی هدر حالا من قسمت هدر رو مشکل دارم :
if ($request->hasHeader('Authorization')) {
$access_token = $request->header('Authorization');
$query = DB::table("admins")->where("access_token", $access_token)->first();
if (isset($access_token) && $access_token == $query->access_token) {
return $next($request);
} else {
return response()->json([
"status" => 401,
"message" => "شما اجازه دسترسی ندارید",
]);
}
}
بی زحمت قبل از هر بررسی یا دستوری توی middleware برو هدرت رو dd بکن ببین چی میشه
dd($request->header('Authorization'));
و یکبار هم با نام دیگه واسه کلید هدر استفاده کن منظورم به جای نام Authorization
و همین طور اصلا برو ببین واقعا هدری وجود داره یانه داخل
مرورگر > developer tools
یا همون f12
و برو بخش network
و سپس درخواست رو باهمون فرانت خودت که میخوای با جاوااسکریپت هدر رو پرکنی بزنو ارسال کن درخواست http رو و توی بسته های ارسالی (http requests) که به همون آدرسی که ارسال کردی برو بخش محتویات و ببین و بررسی کن که آیا واقعا هدر ارسال شده یا نه؟
@abol313 تست کردم ولی null برگردوند نمیدونم یعنی رفته بود تو هدر یا اینکه کلا نرفته بود
اگر نیازه از روت عکس یا کد بفرستم؟
بنظرت چیا باعث میشه که این فرایند صورت نگیره همون رو بفرستم اینجا چک کنیم🙏
نگا کن برو یک جایی شبیه اینجا بعد با همون فرانتت بزن ارسال کن درخواستت رو و سپس برو ببین تو درخواستت که اصلا هدر Authorization تنظیم شده یا نه :
@abol313
رفتم اینجا و گشتم اون درخواست هایی که مربوط به این صفحه هستن و GET هستن و پورتشون ۸۰۰۰ هست یعنی مربوط به بکندن پیدا کردم و وضعیت همه ۲۰۰ بود و ok بودن
و توی ajax call یه success هم گذاشتم و کار میکنه. توش گفتم توکن رو alert بگیره و بلافاصه که صفحه رو رفرش میکنم پرینتش میکنه.
منظور من اون زبانه ای که بسته و روش نوشته
Request Headers (15)
و زبانه رو باز کن و دنبال هدرت که به نام Authorization هست بگرد و لطفا شاتشم بده
حالا تعداد داخل پرانتز هم مهم نیست
بی زحمت کلا برو به جای Authorization
از X-Authorization
استفاده کن ، هم تو فرانتت هم تو بکاند ت ببین کار میکنه؟
توی بک اند هم یکبار dd کنش:
dd($request->header('X-Authorization'));
من توصیه میکنم اگه بخوای با لاراول که api داری که می خوای auth اون مدیریت بشه از sanctum استفاده کن
https://laravel.com/docs/9.x/sanctum
توی این بسته به طور خودکار توکن ها با هدر Authorization و داخل دیتابیس در جدولی توکن ها رو نگه میداره و بالاخره بررسی میکنه که طرف میتونه از این api استفاده کنه یا نه و...
@abol313 باز هم توی فرانت تنظیم میشه ولی توی بک null برمیگردونه.
راستش میخواستم بدون پکیجشو یاد بگیرم.
ولی خب نمیدونم مشکل از کجاست؟
مطمعنی دارم به روت درستی میفرستم؟
اصلا باید تایپش GET باشه؟
به نظرم بهتره زنده یک نگاهی بکنم به کامپیوترت
توی همین جا انیدسکتو اگه میتونی ساعت ۲۱:۰۰ به بعد ،هر زمانی که میتونی اعلام کن و همون زمان کد انیدسکتو این جا بفرست که وصل شه
البته اگه می خوای..
@abol313 آقا ظاهرا صدا توی لینوکس فرستاده نمیشه من باید درستش کنم
نظری ندارید؟
بدون صدا که نمیشه
میشه یه زمان دیگه اینکارو انجام بدیم؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟