سلام
من یه وب سایت دارم که بک اند با nodejs و کلاینت با vuejs زده شده
دارم روی عملیات های احراز هویتش کار میکنم و یه مشکلی ذهنمو درگیر کرده
من وقتی یوزر لاگین میکنه یک کوکی که محتوای اون شامل یک توکن از اطلاعات کاربر هست ذخیره میشه
حالا یه سری صفحات دارم مثل
/profile
/dashboard
/account/pakcage
/account/word
که باید چک کنم ایا توکن کاربر درست هست یا نه که به این صفحات هدایت بشه یا به /login هدایت بشه
فکر میکنم راه درست این هست که در express اون url هایی که بالا نوشتم رو کنترل کنم ولی نمیدونم چجوری چون خب کلاینت روی یه پورت دیگه (از localhost)و سرور روی یک پورت جدا و من نمیتونم به url هایی که توسط vue پشتیبانی میشه رو در nodejs دسترسی داشته باشم
ولی راه دیگه ای هست که اینه که هر موقع در کلاینت این url های پیج های بالا که نوشتم باز شدن یک ریکوئست به سرور شامل مقدار توکن که از کوکی در سمت کلاینت گرفته شده ارسال بشه و اون جا صحت درستی توکن بررسی بشه اگه درست نبود کاربر به /login هدایت بشه که فکر نمیکنم راه درستی باشه چون ممکنه تعداد صفحات زیاد باشه
دوستان لطفا راه درست رو بهم بگید و راهنماییم کنید مرسی
@Raymond
@MortezaVaezi
@Pouyab
@FullStack
@Farzadameri
@Arshiamohammadei
@ossvahid
@hussain2
@magicaldev1
@mparsa1372
راه دیگه ای هست که اینه که هر موقع در کلاینت این url های پیج های بالا که نوشتم باز شدن یک ریکوئست به سرور شامل مقدار توکن که از کوکی در سمت کلاینت گرفته شده ارسال بشه و اون جا صحت درستی توکن بررسی بشه اگه درست نبود کاربر به /login هدایت بشه که
همین راه درست هست برادر حداقل در php که اینطوره..
مسئله رو پیچیده نکنید یک تابع بنوسید و اونو هرجا که لازمه در بالای صفحه قرار بدید تا عملیاتی که گفتید رو انجام بده
سلام.
درون url هایی که نام بردید protected resource های شما وجود دارند و حتما باید دسترسی از سمت سرور محدود بشه به درخواست هایی که توکن معتبر همراه خودشون دارند. پس بله باید url رو کنترل کنید.
اگر از توکن stateless مثل JWT استفاده میکنید نیازی به ارسال درخواست تطابق توکن به سمت سرور ندارید. اگر از statefull استفاده میکنید درخواست تطابق رو حتما باید ارسال کنید. که پیشنهاد میکنم از JWT استفاده کنید که به مراتب هزینه کمتری داره. (البته میتونید JWT رو هم ذخیره کنید که خودشو تامین امنیتش یه داستان جداست)
همون راه دوم درسته برای سایت rest api
تو هدر درخواستی که میفرستی این رو میذاری
Authorization: Bearer <token>
بعد از bearer توکنت رو میذاری
یه میدلویر میسازی که توش توکن رو از هدر بگیره
const token = req.headers['authorization']
اگه توکنی نبود ارور 403 بده و توی کلاینت روت رو تغییر بده به لاگین غیر از این توکن رو وریفای کنه وreq.user رو برابر توکن دیکد شده کنه
بعدهر جا لازم بود توکن رو چک کنی توی روتر اول این میدلویر رو کال میکنی بعد کنترلر اون روت رو بعدش توی کنترلر اون روت میتونی از طریق req.user به توکن دیکد شده دسترسی داشته باشی
router.get('/dashboard', authMiddleware, dashboardController)
من این کار رو میخوام انجام ببینم ولی ببینید این بخشش برام روشن نیست
وقتی router.get('/dashboard', authMiddleware, dashboardController)
زده میشه در واقع داریم میگیم منتظر یه درخواست از
http://localhost:3000/dashboard باش که این روت سرور من هست
در حالیکه یوزر در اصل به
http://localhost:5173/dashboard که آدرس کلاینتم هست
دسترسی داره
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟