使用 Django REST 框架进行 JWT 身份验证
JSON Web Token 是一个开放标准,用于使用 JSON 对象在各方之间安全地传输数据。 JWT 用于用户和提供者的无状态身份验证机制,这意味着在客户端维护会话,而不是在服务器上存储会话。在这里,我们将在 Django 中实现 JWT 认证系统。
所需模块:
- django : Django 安装
- djangorestframework_simplejwt:
pip install djangorestframework_simplejwt
基本设置:
通过以下命令启动项目 -
django-admin startproject config
将目录更改为项目配置 -
cd config
启动服务器 - 通过在终端中键入以下命令启动服务器 -
python manage.py runserver
要检查服务器是否正在运行,请转到 Web 浏览器并输入http://127.0.0.1:8000/作为 URL。
现在按下停止服务器
ctrl-c
让我们创建一个名为“app”的应用程序。
python manage.py startapp app
将配置添加到 settings.py 文件:
打开 config 文件夹中的 settings.py 文件并添加配置。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}
编辑 urls.py 文件
在配置文件夹中打开 urls.py
from django.urls import path, include
from rest_framework_simplejwt import views as jwt_views
urlpatterns = [
path('api/token/',
jwt_views.TokenObtainPairView.as_view(),
name ='token_obtain_pair'),
path('api/token/refresh/',
jwt_views.TokenRefreshView.as_view(),
name ='token_refresh'),
path('', include('app.urls')),
]
编辑视图.py
在 app 文件夹中打开 views.py 并创建一个 API 视图
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
class HelloView(APIView):
permission_classes = (IsAuthenticated, )
def get(self, request):
content = {'message': 'Hello, GeeksforGeeks'}
return Response(content)
编辑 urls.py
在 app 文件夹中创建一个 urls.py 并编辑它
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.HelloView.as_view(), name ='hello'),
]
用法 :
为了发出 HTTP 请求,我们使用了 HTTPie 来安装它。
$ sudo apt install httpie
第1步 :
迁移项目,创建超级用户并运行服务器
$ python3 manage.py migrate
$ python manage.py createsuperuser
$ python manage.py runserver 4000
第2步 :
现在,我们需要进行身份验证并获取令牌。我们将在端点得到的是
/api/令牌/
$ http post http://127.0.0.1:4000/api/token/ username=spider password=vinayak
添加您的用户名和密码
第 3 步:
复制访问令牌并发出请求
$ http http://127.0.0.1:4000/hello/ "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTg3Mjc5NDIxLCJqdGkiOiIzYWMwNDgzOTY3NjE0ZDgxYmFjMjBiMTBjMDlkMmYwOCIsInVzZXJfaWQiOjF9.qtNrUpyPQI8W2K2T22NhcgVZGFTyLN1UL7uqJ0KnF0Y"
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。