安装配置
- 安装
pip install djangorestframework-jwt
- 配置
在设置文件REST_FRAMEWORK项中添加jwt认证:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
添加JWT认证选项:
JWT_AUTH = {
# 设置token有效期
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
}
后端接口、视图设置
Django REST framework JWT内已经提供了登录签发JWT的视图方法,可以直接使用,不用再定义视图逻辑。
- 在urls中定义路由规则
obtain_jwt_token
即内置的登录jwt视图,直接使用无需再定义。
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
url(r'^authorizations/$', obtain_jwt_token),
]
- 重写jwt_response_payload_handler方法
直接使用Django REST framework JWT提供的视图方法时,其默认的返回值只有token值,若需要前端接收到用户其他信息,需要重写其内部的jwt_response_payload_handler方法。
- 源码中jwt_response_payload_handler接收了token、user、requests参数,但返回只返回了token值。
# 源码中jwt_response_payload_handle方法接收参数
response_data = jwt_response_payload_handler(token, user, request)
- 重写方式如下,按需求修改返回值即可:
def jwt_response_payload_handler(token, user=None, request=None):
"""
自定义jwt认证成功返回数据
"""
return {
'token': token,
'id': user.id,
'username': user.username
}
- 自定义
jwt_response_payload_handler
后需在配置文件中声明使用修改后的方法:
# JWT配置
JWT_AUTH = {
# token过期时间
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
# 指定自定义方法及路径
'JWT_RESPONSE_PAYLOAD_HANDLER': 'meiduo_admin.utils.jwt_response.jwt_response_payload_handler',
}
使用JWT认证登录的后端设置就完成了。