资讯专栏INFORMATION COLUMN

演示Vue实现记住账号密码功能的思路和代码

3403771864 / 943人阅读

  实现思路:

  情景:在用户登录时若勾选“记住我”功能选项,则将登录名和密码(加密后)存入本地缓存,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中。

  在本地缓存可以用cookies、localStorage、sessionStorage,但这些都有很多不同的差异,不多说废话。直接说使用我们的,在未设置过期时间,关闭浏览器窗口后就被清除了,显然是符合我们开发需求的,localStorage呢除非主动清除localStorage里的信息,否则将永远存在,关闭浏览器窗口后下次启动任然存在,这个也是符合我们开发需求的,根据业务需求我选择的是localStorage。

1.png


</>复制代码

  1.   <el-form
  2.   ref="loginForm"
  3.   :model="loginForm"
  4.   :rules="loginRules"
  5.   class="login-form"
  6.   auto-complete="on"
  7.   label-position="left"
  8.   >
  9.   <div class="user-login">
  10.   <div class="title-container">
  11.   <span class="title">用户登录</span>
  12.   <span class="annotation">BACKGROUND LOGIN</span>
  13.   </div>
  14.   <div class="core-container">
  15.   <el-form-item prop="username">
  16.   <span class="svg-container">
  17.   <i class="icon el-icon-user" />
  18.   </span>
  19.   <el-input
  20.   ref="username"
  21.   v-model="loginForm.username"
  22.   placeholder="请输入用户名称"
  23.   name="username"
  24.   type="text"
  25.   tabindex="1"
  26.   auto-complete="on"
  27.   />
  28.   </el-form-item>
  29.   <el-form-item prop="password">
  30.   <span class="svg-container">
  31.   <i class="icon el-icon-lock" />
  32.   </span>
  33.   <el-input
  34.   :key="passwordType"
  35.   ref="password"
  36.   v-model="loginForm.password"
  37.   :type="passwordType"
  38.   placeholder="请输入密码"
  39.   name="password"
  40.   tabindex="2"
  41.   auto-complete="on"
  42.   @keyup.enter.native="handleLogin"
  43.   />
  44.   <span class="show-pwd" @click="showPwd">
  45.   <img
  46.   src="@/icons/png/pawyc.png"
  47.   v-if="passwordType === 'password'"
  48.   />
  49.   <i class="el-icon-view" v-else></i>
  50.   </span>
  51.   </el-form-item>
  52.   <el-checkbox
  53.   v-model="checked"
  54.   label="记住密码"
  55.   name="type"
  56.   ></el-checkbox>
  57.   </div>
  58.   <el-button
  59.   class="loginBtn"
  60.   :loading="loading"
  61.   type="primary"
  62.   style="width: 100%; margin-bottom: 30px"
  63.   @click.native.prevent="handleLogin(loginForm)"
  64.   >立即登录</el-button
  65.   >
  66.   </div>
  67.   </el-form>

  记住账号密码实现流程

  密码加密:为提高安全性,密码存储前需进行加密处理。目前加密方式有很多种,我这里选用了base64。

  npm安装base64依赖

</>复制代码

  1.   //安装
  2.   npm install --save js-base64
  3.   //引入
  4.   const Base64 = require("js-base64").Base64

 

</>复制代码

  1.   const Base64 = require('js-base64').Base64
  2.   export default {
  3.   data() {
  4.   return {
  5.   loginForm: {
  6.   username: '',
  7.   password: '',
  8.   },
  9.   checkedfalse,
  10.   };
  11.   },
  12.   mounted () {
  13.   let username = localStorage.getItem('username')
  14.   if (username) {
  15.   this.loginForm.username = localStorage.getItem('username')
  16.   this.loginForm.password = Base64.decode(localStorage.getItem('password'))// base64解密
  17.   this.checked = true
  18.   }
  19.   },
  20.   // 立即登录
  21.   handleLogin (loginForm) {
  22.   this.$refs.loginForm.validate(async (isOK) => {
  23.   if (isOK) {
  24.   /* ------ 账号密码的存储 ------ */
  25.   if (this.checked) {
  26.   let password = Base64.encode(this.loginForm.password) // base64加密
  27.   localStorage.setItem('username'this.loginForm.username)
  28.   localStorage.setItem('password', password)
  29.   } else {
  30.   localStorage.removeItem('username')
  31.   localStorage.removeItem('password')
  32.   }
  33.   try {
  34.   let encrypt = new JSEncrypt() // 新建JSEncrypt对象
  35.   encrypt.setPublicKey(this.publicKey) // 设置公钥
  36.   let password = encrypt.encrypt(this.loginForm.password) // 对密码进行加密
  37.   this.loading = true
  38.   await this['user/login']({
  39.   usernamethis.loginForm.username,
  40.   password: password,
  41.   captcha: this.captchaKey + ':' + this.loginForm.captcha,
  42.   isRememberMethis.loginForm.isRememberMe,
  43.   isScanLoginthis.loginForm.isScanLogin ? 1 : 0
  44.   }).then((res) => {
  45.   this.$router.push(
  46.   {
  47.   path:'/transitionPage',
  48.   query:{
  49.   username:this.loginForm.username
  50.   }
  51.   }
  52.   )
  53.   })
  54.   } catch (error) {
  55.   this.$message.error('用户名或密码错误!')
  56.   } finally {
  57.   // 不论执行try 还是catch 都会执行finally 去关闭转圈
  58.   this.loading = false
  59.   }
  60.   }
  61.   })
  62.   }
  63.   },
  64.   };

2.png

  看到上面这个就知道已经完成我们的需求了

  这个需求的核心代码我标一下

</>复制代码

  1.   /* ------ 账号密码的存储 ------ */
  2.   if (this.checked) {
  3.   let password = Base64.encode(this.loginForm.password) // base64加密
  4.   localStorage.setItem('username'this.loginForm.username)
  5.   localStorage.setItem('password', password)
  6.   } else {
  7.   localStorage.removeItem('username')
  8.   localStorage.removeItem('password')
  9.   }

     相关内容已讲述完毕,欢迎大家后续更多关注。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128197.html

相关文章

  • vue项目实现记住密码到cookie功能(附源码)

    摘要:这里不做加密功能源码链接项目实现表单登录页保存账号和密码到功能觉得对你有帮助的话,下哦。 showImg(https://segmentfault.com/img/remote/1460000013052745?w=443&h=335); 实现功能: 1.记住密码勾选,点登陆时,将账号和密码保存到cookie,下次登陆自动显示到表单内 2.不勾选,点登陆时候则清空之前保存到cooki...

    zzir 评论0 收藏0
  • vue中使用cookiescrypto-js实现记住密码加密

    摘要:最后要在狗子函数内判断用户是否记住了密码来执行相关的操作判断是否记住密码注意这里的是字符串格式,因为存进中会变成判断是否记住密码最后,界面贴上,其中是记住密码按钮的值,是第一个框的值,就是第二个框的值啦。 不多BB,搞快、搞快、 使用crypto-js加解密 第一步,安装 npm install crypto-js 第二步,在你需要的vue组件内import import Crypto...

    khs1994 评论0 收藏0
  • 手摸手,带你用vue撸后台 系列二(登录权限篇)

    摘要:我们将登录按钮上绑上事件,点击登录之后向服务端提交账号和密码进行验证。所以前端和后端权限的划分是不太一致。侧边栏最后一个涉及到权限的地方就是侧边栏,不过在前 完整项目地址:vue-element-admin 系列文章: 手摸手,带你用vue撸后台 系列一(基础篇) 手摸手,带你用vue撸后台 系列二(登录权限篇) 手摸手,带你用vue撸后台 系列三 (实战篇) 手摸手,带你用vu...

    不知名网友 评论0 收藏0
  • Growth Hacker 奇技淫巧一则:零授权,抓取新浪微博任何用户微博内容

    摘要:由于我需要获取普通用户的微博内容,因此还要想办法继续绕。默认是勾上的,也即是说微博团队主观上是希望用户勾上这个,从而借助判断来提高登录安全性的。我遂果断取消勾选该选项,输入任何一个自己的微博账号密码,点击登录。 有时或基于以下凡此种种需求,我们会想要去抓取新浪微博的内容: 产品冷启动,导入外部数据,而非从头积累; 通过大数据+语义分析获取用户兴趣行为偏好,提供智能推荐; 监控微博舆...

    DevWiki 评论0 收藏0

发表评论

0条评论

3403771864

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<