به نام خدا
سریع بریم سر اصل مطلب.
ما از JWT یا json web token برای Authentication استفاده میکنیم تا هرکسی نتونه به api ما دسترسی پیدا کنه .
خب من یه پروژه جنگو دارم که داخلش از rest framework استفاده کردم .
برای اینکه به view هامون پرمیشن بدیم و اجازه ندیم هیچکس بدون Authenticate ازش استفاده کنه کافیه که ماژول IsAuthenticated رو به صورت زیر در فایل view ایمپورت کنیم
from rest_framework.permissions import IsAuthenticated
و حالا درست یک خط بعد از class هامون permission_classes = [IsAuthenticated] رو اضافه میکنیم
تا اگه کاربر لاگین نکرده بود بقیه کد ها اجرا نشوند .
کافیه متن زیر رو داخل ترمینال اجرا کنید
pip install djangorestframework_simplejwt
حالا این اپ رو به قسمت installed app داخل ستینگ پروژه اضافه میکنیم
'rest_framework_simplejwt'
و کد زیر رو توی ستینگ پروژه اضافه میکنیم تا شیوه اتنتیکیت ما jwt باشه :
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ) }
حالا وارد قسمت urls میشویم و ماژول های زیر رو ایمپورت میکنیم :
from rest_framework_simplejwt.views import ( TokenObtainPairView, TokenRefreshView, )
و کد های زیر رو توی قسمت urlpatterns مینویسیم :
path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
حالا وقتی وارد مصیر token بشیم از ما یک username و password میخواد که با وارد کردن یوزرنیم و پسورد یک کاربر میتوانیم دوتا token یکی برای access و یکی برای refresh بگیریم
استفاده از access token :
چون من من سوپریوزر پروژم admin و پسوردشم admin هست و یوزر دیگه ای ندارم از همین به عنوان یوزرنیم و پسورد استفاده میکنم .
وقتی یوزرنیم و پسورد رو وارد کنیم به ما دوتا توکن میده که یکیش access و یکیش refresh هست
توکن access بعد از یه مدت کوتاه فکر کنم 5 دقیقه expire میشه و با توکن refresh میتونیم اون رو تمدید کنیم
در تصویر بالا من از توکن استفاده نکردم و همونطور که میبینید اجازه مشاهده دیتاهارو به من نداده
حالا برای استفاده از توکن access من از postman استفاده میکنم
دامنه رو داخل postman وارد میکنیم و در قسمت header یک کلید Authorization میدهیم و مقدار آن را با Bearer Token پر میکنیم
برای مثال
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjc2Mzg1MjIzLCJpYXQiOjE2NzYzODQ5MjMsImp0aSI6IjZjMDkzNGYzZWM0ZDQ4MTJhMGUxMjg5NzI4NzQzZDFmIiwidXNlcl9pZCI6MX0.nYqX0ZcSY4sCy9YPIxOXTFeV0vCkYJjggvbOi1B6ZWo
حالا در تصویر دوم میبینید که من داخل headers در پستمن توکن رو ارسال کردم و دیتاهارو بهم نشون داده .
ساخت token جدید با پست من(postman) :
لینک رو با متد پست ارسال میکنیم
و داخل قسمت body یوزرنیم و پسورد رو وارد میکنیم
منبع :
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html