美文网首页
JWT认证在Django中的简单实现

JWT认证在Django中的简单实现

作者: 越大大雨天 | 来源:发表于2019-06-22 09:54 被阅读0次

    安装配置

    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中的简单实现

          本文链接:https://www.haomeiwen.com/subject/zklmqctx.html