實現(xiàn)思路:
情景:在用戶登錄時若勾選“記住我”功能選項,則將登錄名和密碼(加密后)存入本地緩存,下次登錄頁面加載時自動獲取保存好的賬號和密碼(需解密),回顯到登錄輸入框中。
在本地緩存可以用cookies、localStorage、sessionStorage,但這些都有很多不同的差異,不多說廢話。直接說使用我們的,在未設(shè)置過期時間,關(guān)閉瀏覽器窗口后就被清除了,顯然是符合我們開發(fā)需求的,localStorage呢除非主動清除localStorage里的信息,否則將永遠(yuǎn)存在,關(guān)閉瀏覽器窗口后下次啟動任然存在,這個也是符合我們開發(fā)需求的,根據(jù)業(yè)務(wù)需求我選擇的是localStorage。
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left" > <div class="user-login"> <div class="title-container"> <span class="title">用戶登錄</span> <span class="annotation">BACKGROUND LOGIN</span> </div> <div class="core-container"> <el-form-item prop="username"> <span class="svg-container"> <i class="icon el-icon-user" /> </span> <el-input ref="username" v-model="loginForm.username" placeholder="請輸入用戶名稱" name="username" type="text" tabindex="1" auto-complete="on" /> </el-form-item> <el-form-item prop="password"> <span class="svg-container"> <i class="icon el-icon-lock" /> </span> <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType" placeholder="請輸入密碼" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" /> <span class="show-pwd" @click="showPwd"> <img src="@/icons/png/pawyc.png" v-if="passwordType === 'password'" /> <i class="el-icon-view" v-else></i> </span> </el-form-item> <el-checkbox v-model="checked" label="記住密碼" name="type" ></el-checkbox> </div> <el-button class="loginBtn" :loading="loading" type="primary" style="width: 100%; margin-bottom: 30px" @click.native.prevent="handleLogin(loginForm)" >立即登錄</el-button > </div> </el-form>
記住賬號密碼實現(xiàn)流程
密碼加密:為提高安全性,密碼存儲前需進(jìn)行加密處理。目前加密方式有很多種,我這里選用了base64。
npm安裝base64依賴
//安裝 npm install --save js-base64 //引入 const Base64 = require("js-base64").Base64
const Base64 = require('js-base64').Base64 export default { data() { return { loginForm: { username: '', password: '', }, checked: false, }; }, mounted () { let username = localStorage.getItem('username') if (username) { this.loginForm.username = localStorage.getItem('username') this.loginForm.password = Base64.decode(localStorage.getItem('password'))// base64解密 this.checked = true } }, // 立即登錄 handleLogin (loginForm) { this.$refs.loginForm.validate(async (isOK) => { if (isOK) { /* ------ 賬號密碼的存儲 ------ */ if (this.checked) { let password = Base64.encode(this.loginForm.password) // base64加密 localStorage.setItem('username', this.loginForm.username) localStorage.setItem('password', password) } else { localStorage.removeItem('username') localStorage.removeItem('password') } try { let encrypt = new JSEncrypt() // 新建JSEncrypt對象 encrypt.setPublicKey(this.publicKey) // 設(shè)置公鑰 let password = encrypt.encrypt(this.loginForm.password) // 對密碼進(jìn)行加密 this.loading = true await this['user/login']({ username: this.loginForm.username, password: password, captcha: this.captchaKey + ':' + this.loginForm.captcha, isRememberMe: this.loginForm.isRememberMe, isScanLogin: this.loginForm.isScanLogin ? 1 : 0 }).then((res) => { this.$router.push( { path:'/transitionPage', query:{ username:this.loginForm.username } } ) }) } catch (error) { this.$message.error('用戶名或密碼錯誤!') } finally { // 不論執(zhí)行try 還是catch 都會執(zhí)行finally 去關(guān)閉轉(zhuǎn)圈 this.loading = false } } }) } }, };
看到上面這個就知道已經(jīng)完成我們的需求了
這個需求的核心代碼我標(biāo)一下
/* ------ 賬號密碼的存儲 ------ */ if (this.checked) { let password = Base64.encode(this.loginForm.password) // base64加密 localStorage.setItem('username', this.loginForm.username) localStorage.setItem('password', password) } else { localStorage.removeItem('username') localStorage.removeItem('password') }
相關(guān)內(nèi)容已講述完畢,歡迎大家后續(xù)更多關(guān)注。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/128197.html
摘要:這里不做加密功能源碼鏈接項目實現(xiàn)表單登錄頁保存賬號和密碼到功能覺得對你有幫助的話,下哦。 showImg(https://segmentfault.com/img/remote/1460000013052745?w=443&h=335); 實現(xiàn)功能: 1.記住密碼勾選,點登陸時,將賬號和密碼保存到cookie,下次登陸自動顯示到表單內(nèi) 2.不勾選,點登陸時候則清空之前保存到cooki...
摘要:最后要在狗子函數(shù)內(nèi)判斷用戶是否記住了密碼來執(zhí)行相關(guān)的操作判斷是否記住密碼注意這里的是字符串格式,因為存進(jìn)中會變成判斷是否記住密碼最后,界面貼上,其中是記住密碼按鈕的值,是第一個框的值,就是第二個框的值啦。 不多BB,搞快、搞快、 使用crypto-js加解密 第一步,安裝 npm install crypto-js 第二步,在你需要的vue組件內(nèi)import import Crypto...
摘要:我們將登錄按鈕上綁上事件,點擊登錄之后向服務(wù)端提交賬號和密碼進(jìn)行驗證。所以前端和后端權(quán)限的劃分是不太一致。側(cè)邊欄最后一個涉及到權(quán)限的地方就是側(cè)邊欄,不過在前 完整項目地址:vue-element-admin 系列文章: 手摸手,帶你用vue擼后臺 系列一(基礎(chǔ)篇) 手摸手,帶你用vue擼后臺 系列二(登錄權(quán)限篇) 手摸手,帶你用vue擼后臺 系列三 (實戰(zhàn)篇) 手摸手,帶你用vu...
摘要:由于我需要獲取普通用戶的微博內(nèi)容,因此還要想辦法繼續(xù)繞。默認(rèn)是勾上的,也即是說微博團(tuán)隊主觀上是希望用戶勾上這個,從而借助判斷來提高登錄安全性的。我遂果斷取消勾選該選項,輸入任何一個自己的微博賬號密碼,點擊登錄。 有時或基于以下凡此種種需求,我們會想要去抓取新浪微博的內(nèi)容: 產(chǎn)品冷啟動,導(dǎo)入外部數(shù)據(jù),而非從頭積累; 通過大數(shù)據(jù)+語義分析獲取用戶興趣行為偏好,提供智能推薦; 監(jiān)控微博輿...
閱讀 547·2023-03-27 18:33
閱讀 732·2023-03-26 17:27
閱讀 630·2023-03-26 17:14
閱讀 591·2023-03-17 21:13
閱讀 521·2023-03-17 08:28
閱讀 1801·2023-02-27 22:32
閱讀 1292·2023-02-27 22:27
閱讀 2178·2023-01-20 08:28