【vue学习】权限管理系统前端实现5-登录功能记住密码功能实现

小咪咪 2024-04-20 22:10 144阅读 0赞

1.登录逻辑

  1. import {ref} from "vue";
  2. import requestUtil from '@/util/request'
  3. import qs from "qs";
  4. import {ElMessage} from "element-plus";
  5. import store from "@/store";
  6. const loginRef = ref(null)
  7. const loginForm = ref({
  8. username:"",
  9. password:""
  10. })
  11. const loginRules = {
  12. username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
  13. password: [{ required: true, trigger: "blur", message: "请输入您的密码" }]
  14. };
  15. const handleLogin=()=>{
  16. loginRef.value.validate(async (valid)=>{
  17. if(valid){
  18. try{
  19. let result=await requestUtil.post("login?"+qs.stringify(loginForm.value))
  20. let data=result.data;
  21. if(data.code==200){
  22. const token = data.authorization;
  23. store.commit('SET_TOKEN',token);
  24. }else{
  25. ElMessage.error(data.msg)
  26. }
  27. }catch(error){
  28. console.log("error:"+error);
  29. ElMessage.error("服务器出错,请联系管理员!")
  30. }
  31. }else{
  32. console.log("验证失败")
  33. }
  34. })
  35. }

1.ref

ref 的作用是将数据包装成一个响应式的引用,使得数据的变化可以被 Vue 自动追踪,并触发相应的重新渲染。当使用 ref 创建的数据引用发生变化时,可以通过 .value 属性来访问引用的实际值,例如 loginRef.valueloginForm.value

2.方法写法

const handleLogin = () => { ... }:这行代码使用箭头函数的语法将一个匿名函数赋值给 handleLogin 变量。箭头函数是 JavaScript 中的一种函数定义方式,它可以简洁地定义一个函数而不需要使用 function 关键字。

= () => 是箭头函数的语法,用于定义一个没有参数的函数。

3.async 和 await 来配合实现等待异步操作

4.loginRef.value.validate(async (valid)=>{}进行表单验证 验证方法是 loginRules

2.安装依赖

记住密码,我们通过cookie来实现,先安装依赖 ‘js-cookie’

存储用户密码,为了安全需要加密,获取密码解密。所以我们安装依赖’jsencrypt’

util下新建jsencrypt.js

  1. import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
  2. // 密钥对生成 http://web.chacuo.net/netrsakeypair
  3. const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' +
  4. 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
  5. const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +
  6. '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' +
  7. 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' +
  8. 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' +
  9. 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' +
  10. 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' +
  11. 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' +
  12. 'UP8iWi1Qw0Y='
  13. // 加密
  14. export function encrypt(txt) {
  15. const encryptor = new JSEncrypt()
  16. encryptor.setPublicKey(publicKey) // 设置公钥
  17. return encryptor.encrypt(txt) // 对数据进行加密
  18. }
  19. // 解密
  20. export function decrypt(txt) {
  21. const encryptor = new JSEncrypt()
  22. encryptor.setPrivateKey(privateKey) // 设置私钥
  23. return encryptor.decrypt(txt) // 对数据进行解密
  24. }

3.记住密码逻辑

  1. // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
  2. if (loginForm.value.rememberMe) {
  3. Cookies.set("username", loginForm.value.username, { expires: 30 });
  4. Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 });
  5. Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 });
  6. } else {
  7. // 否则移除
  8. Cookies.remove("username");
  9. Cookies.remove("password");
  10. Cookies.remove("rememberMe");
  11. }

发表评论

表情:
评论列表 (有 0 条评论,144人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Vue 实现记住登录信息功能

    前言 最近做练习的时候遇到了记住登录用户信息的需求,我查了一些资料、看过几个人的博客,但是我看到的文章不是有错误就是格式及其糟糕,为此我会将我实现的原理用尽可能通俗易懂的