دوستان فکر کنم به اندازه کافی طریقه استفاده از sanctum و نصبش هم توی وب وجود داره برای همین در اینجا اینا رو من توضیح نمیدم بلکه یه نکته در این قسمت بهش میپردازم اونم مربوط میشه به روت sanctum/csrf-cookie که دقیقا چیه و ایا واقعا همیشه اینو لازم داریم؟
میشه گفت این پکیج جایگزین laravel passport هست برای اپلیکیشن هایی که نیازی به پیچیدگی OAuth ندارن برای همین استفاده از اون راحت تر هستش اما در کنار سادگی استفاده از اون ایمن ترم شده. کمی بعد به شیوه محافظت اون میپردازم الان این پکیج هم برای SPA و توکن های ساده و برای موبایل استفاده داره. که میتونین اطلاعات کامل رو در داکیومنت ها پیدا کنید اینجا
در این جا فقط از روش SPA ها صحبت میکنم. در این پکیج برای احراز هویت در واقع از سشن استفاده میشه ولی مگه میشه؟?
اگه درایور سشن کوکی باشه بله ولی سشن ها در لاراول توی فایل web.php ستارت میشن برای همین باید روت های auth رو ببرین به اونجا خب حالا چون از توکن استفاده نمیکنیم بنابراین در صورت حمله xss نشت اطلاعاتی نداریم ولی یه مشکلی به وجود میاد اونم اینه برای روت های post داخل این فایل باید توکن csrf هم همراه درخواست فرستاده بشه و این مارو در برابر حملات csrf ایمن میکنه ولی باز چجوری بفرستیم این قسمت رو ما توی پروژه فرانتمون این قسمت رو نداریم. حالا میرسیم به روت csrf-cookie
توی داک لاراول گفته چون این روت لاگین نیاز به توکن csrf داره باید اول یه درخواست به اونجا بفرستیم یعنی به این شکلی:
axios.get('/sanctum/csrf-cookie').then(response => { // login حالا تازه میتونیم توی اینجا درخواست رو بفرستیم به });
بیاییم و یه نگاه دقیق تر داشته باشیم به این درخواست:
خب حالا توی اینجا ستاتوس برابر هست با 204 که یعنی هیچ محتوایی بازگشت داده نشده که در واقه هیچی هم نیاز نداریم تنها چیزی که مورد توجه ماست این دوتا هدری هستن که توی رسپانس یا جواب از سمت سرور به ما برگشت داده شده که درواقع میان و دوتا کوکی ذخیره میکنن یکی XSRF-TOKEN و laravel_session این کار مارو راه میندازه یعنی الان میتونیم بدون مشکل به سمت لاگین درخواست بدیم (بدون این که به اررور معروف 419 بخوریم).
الان به این شکلی از دو اتک تا حد زیادی در امان میمونیم. ?
تقریبا میشه گفت در اکثر سناریو ها بله. ولی اگه لاراول و بخش فرانتمون باهم قاطی شده باشه دیگه واقعا نیاز نیست که هیچ کار کاملا اشتباهی هم هست. سوال اینه چرا؟ و اینکه پس چجوری لاراول توکن csrf تشخیص میده؟
خب توجه شما به هدرهای یه صفحه ساده لاراول نسخه 7 که تازه نصب شده جلب میکنم.
خب همین جوری که مشاهده میکنین لاراول خودش میاد اینا رو توی هر درخواست ارسال میکنه به رسپانس پس چرا بیایم و خودمون اونو دوباره ست کنیم
اگه به بخش application براوزر دقت کنیم:
بله همین جوری که میبینیم اینا به درستی ست شدن
پس میتونیم به این شکلی فقط و فقط یه درخواست ارسال کنیم
میبینیم اررور 419 به عنوان ستاتوس برگشت نمیده. پس مشکلمون در اینجا هم برطرف میشه
اگه یک اپلیکیشن دارین که فقط به صورت first party هست قطعا این پکیج میتونه بهتون کمک کنه هم ساده تر هست هم ایمن تر. اما در مورد این قسمت که گفتم ممکنه به این روت نیاز نداشته باشین حتما توجه داشته باشید که SANCTUM_STATEFUL_DOMAINS و SESSION_DOMAIN عین هم باشن و این که درخواستتون حتما از لاراول باید عبور کنه
امیدوارم از این مقاله استفاده لازم رو برده باشید.