هر کاربر یک session فعال در جنگو

سلام،
در این مطلب سعی میکنم چالشی که برام به وجود امد و به راهکاری که رسیدم رو با شما به اشتراک بزارم، یعنی هر user تنها بتونه بعد از لاگین کردن در وبسایتی که ما با django نوشتیم یک سشن فعال داشته باشه، مثل واتس‌اپ (لعنت الله علیه) ‌که هرکاربر میتونه یک نسخه فعال داشته باشه (برخلاف تلگرام و… که این اجازه رو به ما میدن که روی دیوایس های مختلف از یک اکانت استفاده کنیم)

این بحث سشن مثل یک شمشیر دولبه هست، فکر کنید این قابلیت رو به وبسایتتون اضافه کردید، کاربر با دسکتاپ لاگین میکنه و کارها شو انجام میده بعد چندساعت بعد دوباره با گوشی لاگین میکنه و… ، بعد از لاگین با موبایل سشن ایجاد شده برای دسکتاپ پاک خواهد شد و اگر دوباره بخواد باسیستم وارد بشه باید دوباره یوزر پس وارد کنه!

ولی گاهی اوقات، لازمه سهولت رو فدای امنیت کرد، چه مواقعی؟ هرموقعی که خودتون صلاح دیدی 🙂
پرحرفی بسه بریم سراغ اصل مطلب

اگر برای کش (Cache) در جنگو از ردیس (Redis) استفاده نمی‌کنید کارتون راحت هست و میتونید با یک سرچ ساده مثل “Prevent Multiple Sessions for a User” در گوگل به جواب برسید.
مثلا این دومورد:

https://dev.to/fleepgeek/prevent-multiple-sessions-for-a-user-in-your-django-application-13oo

https://stackoverflow.com/questions/50833980/how-to-prevent-multiple-login-in-django

اگر لینک های بالا رو دیده باشد، متوجه میشید برای هندل کردن این کار امدن جدول (Table) در دیتابیسشون ایجاد کردن، اگر قرار بود ماهم استفاده کنیم چه نیازی از redis استفاده کنیم؟ از ردیس استفاده میکنیم که کارمون سریع پیش بره!

توجه: در این پروژه برای ردیس از این ماژول استفاده کردم.

راهکار:
بعد از حدود یک روز وقت گذاشتن و برسی ماژول session جنگو (برای اینکه متوجه بشم چطور کار میکنه) و سرچ های زیاد، به این کد رسیدم:

از این متد به عنوان login خود جنگو استفاده کنید یا با یک تغییر کوچیک اون و حذف آرگمان های request, user و login(request, user) اون رو بعد از متد login خودتون فراخوانی کنید.

دیدگاهتان را بنویسید