登录失败时刷新验证码

需求:当因为用户的输入存在错误,导致登录不成功时,需要重新换一张验证码

当点击登录按钮时,会向后端提交用户输入的用户名、密码、验证码等信息,经过后端的校验后,后端会返回code和message以及data等信息,如果返回的code=200就说明登录成功,否则登录失败,在前端显示错误的原因,并且添加state.refreshCaptcha(),更换一张验证码

javascript 复制代码
const state = reactive({
      model: {
        userName: 'admin',
        password: '111111',
        captcha: '',      // 用户输入的验证码
        codeKey: ''       // 后端返回的验证码key
      },
      rules: getRules(),
      loading: false,
      captchaSrc: "" ,
      refreshCaptcha: async () => {
          const { data } = await GetValidateCode() ;
          state.model.codeKey = data.codeKey
          state.captchaSrc = data.codeValue
      },
      btnText: computed(() =>
        state.loading ? ctx.$t('login.logining') : ctx.$t('login.login')
      ),
      loginForm: ref(null),
      submit: () => {
        if (state.loading) {
          return
        }
        state.loginForm.validate(async valid => {
          if (valid) {
            state.loading = true
            const { code, data, message } = await Login(state.model)
            if (+code === 200) {
              ctx.$message.success({
                message: ctx.$t('login.loginsuccess'),
                duration: 1000,
              })

              const targetPath = decodeURIComponent(route.query.redirect)
              if (targetPath.startsWith('http')) {
                // 如果是一个url地址
                window.location.href = targetPath
              } else if (targetPath.startsWith('/')) {
                // 如果是内部路由地址
                router.push(targetPath)
              } else {
                router.push('/')    // 请求成功以后,进入到首页
              }
              useApp().initToken(data)
            } else {
              //登录失败 重新刷新验证码
              state.refreshCaptcha()
              ctx.$message.error(message)
            }
            state.loading = false
          }
        })
      },
    })
相关推荐
JY.yuyu几秒前
Java Web上架流程(Nginx反向代理+负载均衡 ,Apache配置,Maven安装打包,Tomcat配置)
java·开发语言·前端
紫_龙2 分钟前
最新版vue3+TypeScript开发入门到实战教程之路由详解二
前端·javascript·typescript
嵌入式小能手8 分钟前
飞凌嵌入式ElfBoard-环境变量之添加修改环境变量setenv
服务器·前端·javascript
polarisya9 分钟前
vue组件二次封装
前端·javascript·vue.js
逸Y 仙X9 分钟前
文章十二:索引数据的写入和删除
java·大数据·spring boot·spring·elasticsearch·搜索引擎·全文检索
郭泽斌之心10 分钟前
Live2D工程对接Fay数字人框架
前端·经验分享·fay数字人
前端搬砖人沐兮11 分钟前
被忽视的宝藏:深入解读 createRangeFromPoint 的前世今生与实战技巧
前端
kyriewen11 分钟前
手写 Promise:从“我会用”到“我会造”
前端·javascript·面试
wuhen_n12 分钟前
案例分析:大屏可视化项目的卡顿排查与解决
前端·javascript·vue.js
比尔盖茨的大脑13 分钟前
为了学习 AI Agent,我做了一个 AI 阅读器(已开源)
前端·人工智能