drf自定义用户认证:
登录默认 使用django的ModelBackend,对用户名和密码进行验证。但我们平时登录网站时除了用户名也可以用邮箱或手机进行登录,这就需要我们自己扩展backend
一、settings中配置
AUTHENTICATION_BACKENDS = ( ‘users.views.CustomBackend‘, )
users.views中新建backend,对用户名或手机进行验证
二、users/views.py
# users.views.py from django.contrib.auth.backends import ModelBackend from django.contrib.auth import get_user_model from django.db.models import Q User = get_user_model() class CustomBackend(ModelBackend): """ 自定义用户验证 """ def authenticate(self, username=None, password=None, **kwargs): try: #用户名和手机都能登录 user = User.objects.get( Q(username=username) | Q(mobile=username)) if user.check_password(password): return user except Exception as e: return None
三、JWT有效时间设置
settings中配置
import datetime #有效期限 JWT_AUTH = { ‘JWT_EXPIRATION_DELTA‘: datetime.timedelta(days=7), #也可以设置seconds=20 ‘JWT_AUTH_HEADER_PREFIX‘: ‘JWT‘, #JWT跟前端保持一致,比如“token”这里设置成JWT }
四 添加url
from rest_framework_jwt.views import obtain_jwt_token #... urlpatterns = [ ‘‘, # ... url(r‘^api-token-auth/‘, obtain_jwt_token), ]
drf的token与jwt的区别:
原文:https://www.cnblogs.com/shangjunnihao/p/10701186.html