http://lion1ou.win/2017/01/18/
JWT用戶認證
使用json-web-token
第三方模塊:django-rest-framework-jwt
安裝:
pip install djangorestframework-jwt
將jsonWebAuth加入到drf 的default auth class中:
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
- 配置url
url(r'^login/', obtain_jwt_token),
自定義Django用戶認證函數
首先在setting中設置變量:
# 設置郵箱和用戶名和手機號均可登錄
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)
在user/view.py中
class CustomBackend(ModelBackend):
"""
自定義用戶驗證規則
"""
def authenticate(self, username=None, password=None, **kwargs):
try:
# 不希望用戶存在兩個,get只能有一個。兩個是get失敗的一種原因
# 后期可以添加郵箱驗證
user = User.objects.get(
Q(username=username) | Q(mobile=username))
# django的后臺中密碼加密:所以不能password==password
# UserProfile繼承的AbstractUser中有def check_password(self,
# raw_password):
if user.check_password(password):
return user
except Exception as e:
return None
JWT的過期時間設置
# 與drf的jwt相關的設置
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=20),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}