Vue3实现记住密码功能

1.首先安装 js-cookie、jsencrypt

npm  i js-cookie  // 使用Cookie来实现记住密码功能

npm  i jsencrypt  //使用jsencrypt进行加密解密

2.完整代码 

注:在此我使用了ant-design-vue组件库  若使用源码请自行配置ant-design-vue

<template>
 <h2 :style="{marginLeft:'45%'}">记住密码demo</h2>
  <a-form
    :model="formState"
    name="basic"
    :label-col="{ span: 6 }"
    :wrapper-col="{ span: 12 }"
    autocomplete="off"
    @finish="onFinish"
    @finishFailed="onFinishFailed"
  >
    <a-form-item label="用户名" name="username">
      <a-input v-model:value="formState.username" />
    </a-form-item>

    <a-form-item label="密码" name="password">
      <a-input-password v-model:value="displayPassword" />
    </a-form-item>

    <a-form-item name="remember" :wrapper-col="{ offset: 6, span: 12 }">
      <a-checkbox v-model:checked="formState.remember">记住我</a-checkbox>
    </a-form-item>

    <a-form-item :wrapper-col="{ offset: 6, span: 12 }">
      <a-button type="primary" html-type="submit">登录</a-button>
    </a-form-item>
  </a-form>
</template>

<script setup>
import { reactive,computed, onMounted } from "vue";
import Cookies from "js-cookie"; 
import JSEncrypt from "jsencrypt/bin/jsencrypt.min";


const formState = reactive({
  username: Cookies.get("username") ? Cookies.get("username") : "",
  password:  "",
  remember: false,
});

const displayPassword = computed({
  get: () => {
    // 在这里解密密码,仅当有加密的密码存储时才执行解密
    if (Cookies.get("username")) {
      return decrypt(Cookies.get("password"));
    }
    return ""; // 如果没有加密密码,则返回空字符串
  },
  set: (val) => (formState.password = val),
});

const publicKey = ''; //公钥
const privateKey = ''; //私钥

const onFinish = (values) => {
  if (formState.remember) {
    Cookies.set("username", formState.username, { expires: 7 }); //设置有效期为7天
    Cookies.set("password", encrypt(formState.password), { expires: 7 }); //对密码进行加密
  } else {
    Cookies.remove("username");
    Cookies.remove("password");
  }
};

// 加密

const encrypt = (val) => {
  const encryptor = new JSEncrypt();
  encryptor.setPublicKey(publicKey); // 设置公钥
  return encryptor.encrypt(val); // 对数据进行加密
};

// 解密
const decrypt = (val) => {
  const encryptor = new JSEncrypt();
  encryptor.setPrivateKey(privateKey); // 设置私钥
  return encryptor.decrypt(val); // 对数据进行解密
};

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值