JS登錄密碼基于token和CryptoJS加密處理方法
1.登錄前先請求,獲取一個(gè)token,也可以在本地寫死
暫且叫登錄token,用來給登錄時(shí)密碼的加密
async getToken(){ const {data:token} = await getToken() // token : eaaaaaaaaaIUzI1NiJ9.eyJ1aWQiOiJDRTY3,例如這樣的 this.token = token }
2.使用登錄token,通過CryptoJS給password加密
ps:當(dāng)然要和后端商量好. npm i crypto-js
// 記得導(dǎo)入 let CryptoJS = require('crypto-js'); // 規(guī)定截取登錄token的多少位 let key = CryptoJS.enc.Utf8.parse(this.token.substr(0, 30)); // 拿到登錄時(shí)輸入的密碼 let srcs = CryptoJS.enc.Utf8.parse(this.password); // 加密方式 let encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); let data = { name:this.name, // 這樣即可完成加密 password:encrypted.toString(), token:this.token } // 請求登錄即可 this.goLogin(data)
3.解密(后端完成即可)
ps: key和配置信息一定要溝通成完全一樣,才能解密成功
// pwd 即為加密后的密碼。 例如 5CSUSaG2vhvoITJESgTR6A== let key = CryptoJS.enc.Utf8.parse(this.token.substr(0, 30)); let decrypted = CryptoJS.AES.decrypt(this.pwd, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); // 獲得解密后的密碼 let resPwd = decrypted.toString(CryptoJS.enc.Utf8)
4.登錄
// 登錄請求 async goLogin(data){ const {data:res} = await goLogin(data) // 成功后,拿到用戶token,把token寫入session中 window.sessionStorage.setItem('token', res.token); }
5.在請求攔截中設(shè)置,每次請求時(shí)帶上token
ajax.interceptors.request.use(config => { // headers加參數(shù) let token = window.sessionStorage.getItem('token'); config.headers.common['x-access-token'] = token; return config; },(error) => { console.log(erroe) });
6.后端拿到token
解密token獲得userId , 根據(jù)需要 返回前端需要的數(shù)據(jù)
用戶下次再請求時(shí) , 如果token還在有效期內(nèi),不需要重新登陸
歡迎關(guān)注微信公眾號:大數(shù)據(jù)從業(yè)者

浙公網(wǎng)安備 33010602011771號