基于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))
原文地址:https://www.cnblogs.com/shenjianping/p/11448160.html