美文网首页django-rest-framework开发Django
django-rest-framework(实战篇)——JWT用

django-rest-framework(实战篇)——JWT用

作者: Ccccolin_aha | 来源:发表于2018-04-11 15:46 被阅读73次

    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',
    }
    

    相关文章

      网友评论

      • Beam_L:您好,我想请问一下class CustomBackend(ModelBackend) 里面的ModelBackend 继承的是哪个?
        Ccccolin_aha:ModelBackend继承的是object

      本文标题:django-rest-framework(实战篇)——JWT用

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