基于restframework进行token验证

Posted shenjianping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于restframework进行token验证相关的知识,希望对你有一定的参考价值。

  一般情况下,进入到web网站主页都需要进行token或者其它验证,不能在没有登录的情况下可以查看主页的内容,在用户输入用户名密码后,进行校验成功,后台会返回一个token,用于用于下次访问主页或其它页面进行用户认证,一旦认证成功就可以访问了。

1、用户获取token

用户向后台API发送用户名和密码进行校验以及获取token。

 methods: 

      loginSubmit(formName) 
        this.$refs[formName].validate(async (valid) => 
          if (valid) 
            const res = await this.$http.post(‘login‘, this.form);
            const data, meta: message, code = res.data;
            if (code === 2000) 

              //获取token,将token值存储在localStorage
              localStorage.setItem(‘token‘, data.token);

              //验证成功后直接跳转到主页
              this.$router.push(name: ‘home‘);
              //登陆成功提示
              this.$message.success(message)
             else 
              this.$message.warning(message)
            

           else 
            this.$message.warning("用户名或密码不能为空")
          
        );
      
    ,

2、后台进行验证

class LoginView(APIView):
    authentication_classes = []  # 登陆页面免认证,其余的已经全局配置

    def post(self, request, *args, **kwargs):

        ret = 
            "data": ,
            "meta": 
                "code": 2001,
                "message": "用户名或密码错误"
            
        
        user_obj = json.loads(str(request._request.body, encoding=utf8))
        username = user_obj.get(username)
        password = user_obj.get(password)
        if username and password:
            obj = UserInfo.objects.filter(
                username=username, password=password).first()
            if obj:

                token = get_md5(username)
                # 自动去数据库检查,如果没有就创建,否则更新token
                UserToken.objects.update_or_create(user=obj, defaults=token: token)
  
                ret["data"]["username"] = username
                ret["data"]["password"] = password
                ret["data"]["token"] = token

                ret["meta"]["code"] = 2000
                ret["meta"]["message"] = "登陆成功"
            else:
                pass
        else:
            pass
        return HttpResponse(json.dumps(ret, ensure_ascii=False))

 

以上是关于基于restframework进行token验证的主要内容,如果未能解决你的问题,请参考以下文章

python 为Django restframework生成JWT(JSON WEB TOKEN)

基于Token的验证

Django学习之Rest Framework 的Token验证功能优化详解

ArcGIS Server 基于Token安全验证

使用JWT 进行基于 Token 的身份验证方法

基于token的身份验证-2.0版本