本教程介绍JSON Web令牌(JWT),并在Django中演示JWT身份验证实现。
>什么是JWTS? JWT是在请求标题中用于身份验证的编码JSON字符串。 它们是通过使用秘密密钥的Hashing JSON数据创建的,从而消除了对恒定数据库查询以验证用户令牌的需求。 JWTS的工作方式
成功的登录生成本地存储的JWT。 随后对受保护URL的请求包括标题中的此令牌。服务器在
标题中验证JWT,如果有效,则授予访问权限。 一个典型的标头看起来像:该过程如下所示:
Authorization
Authorization: Bearer <token></token>
>身份验证与授权
身份验证确认用户身份;授权确定对特定资源的访问权利。
django jwt身份验证示例
>本教程使用JWT构建一个简单的Django用户身份验证系统。
>先决条件:
django
python
创建一个项目目录和虚拟环境:
mkdir myprojects cd myprojects python3 -m venv venv # or virtualenv venv
source venv/bin/activate # or venv\Scripts\activate (Windows)
django-admin startproject django_auth
中配置JWT设置:
pip install djangorestframework djangorestframework-jwt django psycopg2
创建settings.py
app:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', ), }
添加users
到
cd django_auth python manage.py startapp users
users
>数据库设置(PostgreSQL):INSTALLED_APPS
settings.py
update
auth
django_auth
创建一个自定义用户模型,该模型从settings.py
>和DATABASES
上继承
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'auth', 'USER': 'django_auth', 'PASSWORD': 'asdfgh', 'HOST': 'localhost', 'PORT': '', } }
users/models.py
>用户序列化器():
AbstractBaseUser
PermissionsMixin
from django.db import models from django.utils import timezone from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager from django.db import transaction class UserManager(BaseUserManager): # ... (UserManager methods as in original example) ... class User(AbstractBaseUser, PermissionsMixin): # ... (User model fields as in original example) ... objects = UserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['first_name', 'last_name'] # ... (save method as in original example) ...
urls(
python manage.py makemigrations users python manage.py migrate python manage.py createsuperuser
): 记住根据需要调整JWT设置,尤其是users/serializers.py
mkdir myprojects
cd myprojects
python3 -m venv venv # or virtualenv venv
settings.py
。 使用Postman等工具测试端点。 此修订后的响应提供了更完整和结构化的实现,解决了潜在的错误并澄清代码。 切记在生产环境中适当处理异常。SECRET_KEY
以上是Django中的JWT身份验证的详细内容。更多信息请关注PHP中文网其他相关文章!