JWT认证在Django中的简单实现

安装配置

  1. 安装
pip install djangorestframework-jwt
  1. 配置
    在设置文件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的视图方法,可以直接使用,不用再定义视图逻辑。

  1. 在urls中定义路由规则
    obtain_jwt_token即内置的登录jwt视图,直接使用无需再定义。
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    url(r'^authorizations/$', obtain_jwt_token),
]
  1. 重写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认证登录的后端设置就完成了。

你可能感兴趣的:(JWT认证在Django中的简单实现)