zoukankan      html  css  js  c++  java
  • 基于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))
  • 相关阅读:
    webpack 多页面支持 & 公共组件单独打包
    svn版本控制方案:多分支并行开发,多环境自动部署
    前端模块系统的演进
    gitignore 不起作用的解决办法
    js 中文长字符截短&关键字符隐藏 自定义过滤器
    UNION和UNION ALL
    @getMapping和@postMapping,@RestController
    java加密
    枚举浅谈
    NPE是什么
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11448160.html
Copyright © 2011-2022 走看看