vue3+js 实现记住密码功能

常见的几种实现方式 

1 基于spring security 的remember me 功能

localStorage

除非主动清除localStorage 里的信息 ,不然永远存在,关闭浏览器之后下次启动仍然存在

存放数据大小一般为5M

不与服务器进行交互通信 

cookies   

可以手动设置过期时间,关闭浏览器之后就清除了

存放数据大小一般为4K 

每次请求都会被传送到服务器

增加一个remeber me的标签 在登录页中 

在登录方法中 添加如下代码 登录成功写入cookie 

在js模块

挂载 getCookie 函数

methods 方法中实现 三个函数  getCookie  setCookie clearCookie

getCookie 

setCookie  clearCookie 

完整代码

<template>
    <div class="login_container"> <!-- 绘制全页面背景色-->
      <div class="login_box"> <!-- 绘制登录白色盒子-->
        <div class="avatar_box">  <!--  白色盒子内 头像区域 引入logo   -->
          <img src="../assets/gezi.png" alt="" />
        </div>
        <!-- 登录表单区域 ref定义一个响应式对象loginForm :model属性绑定方式 表单所有数据都自动同步到loginForm对象上
            :rules是el-form组件通过属性绑定,添加数据验证行为
        -->
        <el-form ref="loginForm" :model="loginForm" :rules="rules" label-width="80px" class="login_form" > <!-- 需要把输入框放到页面偏下的位置,login_form加一个定位器-->
          <!--   用户名     -->
          <el-form-item label="用户">
            <el-input :prefix-icon="User" v-model="loginForm.username" placeholder="请输入用户名"> </el-input>
          </el-form-item>
          <!--   密码     -->
          <el-form-item label="密码">
            <el-input :prefix-icon="Lock" v-model="loginForm.password" type="password" placeholder="请输入密码" show-password></el-input>
          </el-form-item>
          <!--    按钮区域 -->
          <el-row justify="end"> <!-- 设置按钮在右边靠齐" -->
          <el-form-item class="btn">   <!-- 按钮区域定义一个类 按钮向右对齐-->
            <el-button type="primary" @click="login" style="width: 100%; margin-top: 5px">登录</el-button>
<!--            <el-button @click="register">没有注册,请注册</el-button>-->
          </el-form-item>
            <el-form-item>
            <el-checkbox label="记住我" v-model="checked"></el-checkbox>
            </el-form-item>
          </el-row>
        </el-form>
      </div>
    </div>
</template>
<script >
import qs from 'qs'
//页面上按需引入icon
import { User, Lock } from "@element-plus/icons-vue"
import ElMessage from "element-plus";
import { onMounted} from "vue";

export default {
    name: "Login",
    setup() {
        let sub_btn = () => {
            if (!loginForm.username || !loginForm.password) {
                ElMessage.error("账户或者密码不能为空");
            }
        };


        //引用的图标通过Setup进行注册
        return {
           User,
           Lock,
          sub_btn,
        };
    },
  mounted() {
    this.getCookie()
  },
  data(){
      return{
        // 登录表单的数据绑定对象
        loginForm: {
          username: '',
          password: ''
        },
        rules:{    // 验证规则对象
          // name为验证规则数组,每个验证规则都是一个数组 trigger表示触发验证机制,blur鼠标失去焦点时触发本次验证行为
          username: [{ required: true, message: '请输入用户名', trigger: 'blur'}],
          password: [
              { required: true, message: '请输入密码', trigger: 'blur'},
              { min: 3, max: 15, message: '密码长度6到15个字符', trigger: 'blur'}],
        }
      }
    },
  methods:{
      login(){
        const that = this
        this.$refs.loginForm.validate(async valid => {
          if (!valid) return
          // 将loginForm对象转换为查询字符串
          var data = qs.stringify(this.loginForm)
          // 由于data属性是一个json对象,需要进行解构赋值{data:result},进行状态码判断
           await this.$http.post('/api/doLogin',data).then(function (response){
            if (response.data.status === 200){
              console.log('登录成功')
              that.$message.success("登录成功")
              // cookie 密码记录
              window.sessionStorage.setItem("user", JSON.stringify(response.object))
              //  路由跳转到Home页
              that.$router.push('/home')

            }else {
              console.log('登录失败,api后端接口状态',response.data.status)
              that.$message.error("登录失败后端接口状态码"+response.data.status)
            }
          })
        });
      // 判断复选框是否被勾选 勾选在调用cookie 方法
        if (this.checked === true) {
        // 过期天数为7天
          this.setCookie(this.loginForm.username, this.loginForm.password, 7)
        }else{
          // 清除cookie

        }
      },
      register(){
        this.$router.push('/LoginRegister')

      },
      // 读取cookie
      getCookie: function (){
        if (document.cookie.length > 0) {
          // cookie 分割成一个个独立的 key value 形式
          let arr = document.cookie.split(";")
          for (var i = 0; i < arr.length; i++){
            var arr2 =  arr[i].split('=')
            if (arr2[0] === 'userName') {
              this.loginForm.username = arr2[1]
            } else  if (arr2[0] === 'userPwd'){
              this.loginForm.password = arr2[1]
            }
          }
        }

      },

      // 设置cookie
      setCookie(name, pwd, exdays){
        var exdate = new Date()
        //
        exdate.setTime(exdate.setTime() + 24 * 60 * 60 * 1000 * exdays);
        window.document.cookie = "userName" + "=" + name + ";path=/;expires=" + exdate.toUTCString();
        window.document.cookie = "userPwd" + "=" + pwd + ";path/;expires" + exdate.toUTCString();
      },
      // 清除cookie
      clearCookie: function() {
        this.setCookie("", "", -1);
      }
  }
//
}
</script>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue 3中,使用Element Plus实现记住密码功能可以通过以下步骤完成: 1. 首先,你需要在登录表单中添加一个复选框,用于用户选择是否记住密码。 ```html <el-form-item label="记住密码"> <el-checkbox v-model="rememberPassword"></el-checkbox> </el-form-item> ``` 2. 在Vue的data选项中添加一个记住密码的变量,并初始化为false。 ```javascript data() { return { rememberPassword: false, // 其他data属性... } }, ``` 3. 在登录表单提交时,将用户是否选择记住密码的状态保存到本地存储(localStorage)中。 ```javascript methods: { login() { // 其他登录逻辑... // 判断用户是否选择了记住密码 if (this.rememberPassword) { localStorage.setItem('username', this.username); localStorage.setItem('password', this.password); } else { localStorage.removeItem('username'); localStorage.removeItem('password'); } } } ``` 4. 在组件的`mounted`钩子函数中,检查本地存储中是否有保存的用户名和密码,并将其绑定到表单上。 ```javascript mounted() { const savedUsername = localStorage.getItem('username'); const savedPassword = localStorage.getItem('password'); if (savedUsername && savedPassword) { this.username = savedUsername; this.password = savedPassword; this.rememberPassword = true; } } ``` 这样,当用户选择记住密码并成功登录后,下次打开面时用户名和密码会自动填充,并且你可以在登录表单中的复选框中显示选中状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村长在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值