جشنواره بهارانه راکت! ۳۵% تخفیف ویژه بر روی دوره‌های آموزشی

مشاهده دوره‌ها
ثانیه
دقیقه
ساعت
روز
محمدرضا فلکی
2 سال پیش توسط محمدرضا فلکی مطرح شد
17 پاسخ

گرفتن توکن از header در backend

سلام دوستان
من متوجه شدم که باید برای صفحه هایی که متدشون 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 کنم؟


ثبت پرسش جدید
ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش آپدیت شد
1

بِسْمِ ٱلْلّٰهِ ٱلْرَّحْمٰنِ ٱلْرَّحِیْم
ٱلْحَمْدُ لِلّٰهِ

سلام اگه منظورت توی لاراوله که با request میشه و متد header

$request->header('Header-Key', 'default value');

اینجا رو یک نگاهی بکن:
https://laravel.com/docs/9.x/requests#request-headers


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

خیلی ممنون @abol313
من از hasHeader استفاده کردم ولی اون قسمتی داخل hasHeader بود اصلا اجرا نشد!
نمیدونم دلیلیش چیه
کد فرانتندمم فکر نکنم مشکلی داشته باشه اما نمیدونم چرا اجرا نمیشه؟؟
اصلا برای فرستادن توکن از صفحه ای که متدش GET هست به میدلویر استفاده کردن از header درسته؟


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
1

چطوری از hasHeader استفاده کردی؟
و اینکه توی پروتکل http فکرکنم هر متدی یا فعل http مثل get، post، put، patch، delete، options
می تونه هدر خودشو داشته باشه
مثل
Content-Type:application/json
Accept:application/json
و...

و همین طور منظورت از

ولی اون قسمتی داخل hasHeader بود اصلا اجرا نشد!

چیست؟


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش آپدیت شد
0

@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" => "شما اجازه دسترسی ندارید",
        ]);
    }
}

ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش آپدیت شد
1

بی زحمت قبل از هر بررسی یا دستوری توی middleware برو هدرت رو dd بکن ببین چی میشه

dd($request->header('Authorization'));

و یکبار هم با نام دیگه واسه کلید هدر استفاده کن منظورم به جای نام Authorization

و همین طور اصلا برو ببین واقعا هدری وجود داره یانه داخل
مرورگر > developer tools
یا همون f12
و برو بخش network
و سپس درخواست رو باهمون فرانت خودت که میخوای با جاوااسکریپت هدر رو پرکنی بزنو ارسال کن درخواست http رو و توی بسته های ارسالی (http requests) که به همون آدرسی که ارسال کردی برو بخش محتویات و ببین و بررسی کن که آیا واقعا هدر ارسال شده یا نه؟


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

@abol313 تست کردم ولی null برگردوند نمیدونم یعنی رفته بود تو هدر یا اینکه کلا نرفته بود
اگر نیازه از روت عکس یا کد بفرستم؟
بنظرت چیا باعث میشه که این فرایند صورت نگیره همون رو بفرستم اینجا چک کنیم🙏


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
1

نگا کن برو یک جایی شبیه اینجا بعد با همون فرانتت بزن ارسال کن درخواستت رو و سپس برو ببین تو درخواستت که اصلا هدر Authorization تنظیم شده یا نه :
headers


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

@abol313
رفتم اینجا و گشتم اون درخواست هایی که مربوط به این صفحه هستن و GET هستن و پورتشون ۸۰۰۰ هست یعنی مربوط به بکندن پیدا کردم و وضعیت همه ۲۰۰ بود و ok بودن
 تصویر

 تصویر

 تصویر

و توی ajax call یه success هم گذاشتم و کار میکنه. توش گفتم توکن رو alert بگیره و بلافاصه که صفحه رو رفرش میکنم پرینتش میکنه.


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
1

منظور من اون زبانه ای که بسته و روش نوشته
Request Headers (15)
و زبانه رو باز کن و دنبال هدرت که به نام Authorization هست بگرد و لطفا شاتشم بده
حالا تعداد داخل پرانتز هم مهم نیست


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

@abol313
سه تا زبانه به اسم customers بود که تو یکیشون پیداش کردم!

 تصویر


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش آپدیت شد
1

بی زحمت کلا برو به جای Authorization از X-Authorization استفاده کن ، هم تو فرانتت هم تو بکاند ت ببین کار میکنه؟
توی بک اند هم یکبار dd کنش:

dd($request->header('X-Authorization'));

ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
0

من توصیه میکنم اگه بخوای با لاراول که api داری که می خوای auth اون مدیریت بشه از sanctum استفاده کن
https://laravel.com/docs/9.x/sanctum

توی این بسته به طور خودکار توکن ها با هدر Authorization و داخل دیتابیس در جدولی توکن ها رو نگه میداره و بالاخره بررسی میکنه که طرف میتونه از این api استفاده کنه یا نه و...


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش آپدیت شد
0

@abol313 باز هم توی فرانت تنظیم میشه ولی توی بک null برمیگردونه.
راستش میخواستم بدون پکیجشو یاد بگیرم.
ولی خب نمیدونم مشکل از کجاست؟
مطمعنی دارم به روت درستی میفرستم؟
اصلا باید تایپش GET باشه؟


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
1

به نظرم بهتره زنده یک نگاهی بکنم به کامپیوترت
توی همین جا انیدسکتو اگه میتونی ساعت ۲۱:۰۰ به بعد ،هر زمانی که میتونی اعلام کن و همون زمان کد انیدسکتو این جا بفرست که وصل شه
البته اگه می خوای..


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

@abol313 آقا ظاهرا صدا توی لینوکس فرستاده نمیشه من باید درستش کنم
نظری ندارید؟
بدون صدا که نمیشه
میشه یه زمان دیگه اینکارو انجام بدیم؟


ابوالفضل رجائی نسب
تخصص : برنامه نویس (laravel-backend-p...
@abol313 2 سال پیش مطرح شد
محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

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

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