Bootstrap

js 实现记住密码功能

这是我弄得一点源码 

使用 js 记住密码 选了半天最后 选择了 js.cookie.min.js 实现的 当然 也加了一点 加密手段 用的 crypto-js 这个 自己封装了一下 感觉还行 以后能重复用的  二话不说  先放资源   :  

这么多资源 不得给个赞 关注一下的  

当然 最简单的就是

  localStorage 令牌 

直接存就可以了

// 将令牌存储到localStorage  
localStorage.setItem('auth_token', token);

// 从localStorage获取令牌  
const storedToken = localStorage.getItem('auth_token');  

// 删除之前存储的数据项  
localStorage.removeItem('name');

  
// 在请求头中添加令牌  
const headers = {  
  'Authorization': `Bearer ${storedToken}`  
};  
  
// 发送请求到服务器进行验证  
fetch('/protected-resource', {  
  method: 'GET',  
  headers: headers  
})  
.then(response => {  
  // 处理响应  
})  
.catch(error => {  
  // 处理错误  
});


// 假设你有一个函数来检查令牌是否即将过期  
function isTokenExpiringSoon(token) {  
  // 根据令牌中的有效期信息判断  
  // ...  
  return true; // 或 false  
}  
  
// 刷新令牌的函数  
function refreshToken(oldToken) {  
  // 发送请求到服务器的令牌刷新端点  
  return fetch('/refresh-token', {  
    method: 'POST',  
    headers: {  
      'Authorization': `Bearer ${oldToken}`  
    }  
  })  
  .then(response => response.json())  
  .then(data => {  
    const newToken = data.token;  
    localStorage.setItem('auth_token', newToken);  
    return newToken;  
  });  
}  
  
// 在适当的时候调用刷新令牌函数  
const token = localStorage.getItem('auth_token');  
if (isTokenExpiringSoon(token)) {  
  refreshToken(token)  
  .catch(error => {  
    // 处理错误,可能需要用户重新登录  
  });  
}

crypto-js.js  

crypto-js.js  icon-default.png?t=N7T8https://gitee.com/waiterdtfhdt/crypto-js.git加一个直接复制源码   icon-default.png?t=N7T8https://cdn.jsdelivr.net/npm/[email protected]/crypto-js.js

 可以自己下载 顺便关注一下啊

我自己有一个专门介绍的 可以去可以去看看  

【CryptoJS】使用介绍-CSDN博客CryptoJS是一个JavaScript的加解密的工具包。哈希散列,进行加解密。https://blog.csdn.net/weixin_52208686/article/details/138237763        官网地址   :   https://code.google.com/archive/p/crypto-js/  

//AES 加密语法
CryptoJS.AES.encrypt('待加密字符串', '密钥').toString() 


//AES 解密语法
CryptoJS.AES.decrypt('待解密字符串', '密钥').toString(CryptoJS.enc.Utf8)


//案例1:文本加解密


//加密
//ciphertext 密文:经加密函数处理后的数据
const ciphertext = CryptoJS.AES.encrypt('my message', 'secret key').toString()


//解密
//plaintext 明文:没有经过加密的数据
const plaintext = CryptoJS.AES.decrypt(ciphertext, 'secretkey').toString(CryptoJS.enc.Utf8)


//案例2:对象加解密

//原始数据
const arr = [{id: 1}, {id: 2}]
const strArr = JSON.stringify(arr)



//加密
const ciphertext = CryptoJS.AES.encrypt(strArr, 'secret key').toString()


//解密
const plaintext = CryptoJS.AES.decrypt(ciphertext,'secretkey').toString(CryptoJS.enc.Utf8)
const plaintextArr = JSON.parse(plaintext)

js.cookie.min.js

js  js.cookie.min.js   

  
// 假设我们有一个加强的加密算法函数 encrypt 和解密算法函数 decrypt  
function encrypt(password) {  
    // 这里应该使用真正的加密算法,例如AES,并结合安全的密钥管理  
    // 示例中仅使用了一个简单的伪加密算法  
    const salt = 'some-random-salt'; // 应该是一个随机且保密的盐值  
    const encrypted = password + salt; // 示例中的“加密”只是简单拼接了一个盐值  
    return btoa(unescape(encodeURIComponent(encrypted))); // 使用base64编码  
}  
  
function decrypt(encryptedPassword) {  
    // 这里应该使用与encrypt函数中相同的解密算法和密钥  
    // 示例中的“解密”只是简单移除盐值并解码  
    const decoded = decodeURIComponent(escape(atob(encryptedPassword)));  
    const salt = 'some-random-salt'; // 必须与加密时使用的盐值相同  
    const decrypted = decoded.replace(salt, ''); // 示例中的“解密”只是简单移除盐值  
    return decrypted;  
}  
  
// 存储加密后的密码  
function storeEncryptedPassword(password) {  
    const encryptedPassword = encrypt(password);  
    Cookies.set('encryptedPassword', encryptedPassword);  
}  
  
// 获取并解密存储的密码  
function getDecryptedPassword() {  
    const encryptedPassword = Cookies.get('encryptedPassword');  
    if (encryptedPassword) {  
        return decrypt(encryptedPassword);  
    }  
    return null;  
}  
  
// 示例用法:  
const userPassword = 'myPassword123'; // 用户的明文密码  
storeEncryptedPassword(userPassword); // 存储加密后的密码  
  
const decryptedPassword = getDecryptedPassword(); // 获取并解密密码  
console.log(decryptedPassword); // 输出:myPassword123



https://code.google.com/archive/p/crypto-js/

三个 可以自己下载 

jquery.cookie.js

 这个 不是很推荐  主要是 没人维护了  

jQuery.cookie = function (name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        var path = options.path ? '; path=' + options.path : '';
        var domain = options.domain ? '; domain=' + options.domain : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

使用 :

  1. 引入 jQuery 和 jQuery Cookie 插件

在你的 HTML 文件中,首先引入 jQuery,然后引入 jQuery Cookie 插件。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
  1. 设置 Cookie

使用 $.cookie 方法来设置一个 cookie。你可以指定名称、值和选项(如过期时间、路径、域等)。

$.cookie('name', 'value', { expires: 7, path: '/' }); // 设置一个名为 'name' 的 cookie,值为 'value',7 天后过期
  1. 读取 Cookie

要读取一个 cookie,只需使用 $.cookie 方法并提供 cookie 的名称。

var cookieValue = $.cookie('name'); // 读取名为 'name' 的 cookie 的值
  1. 删除 Cookie

要删除一个 cookie,你可以通过设置过期日期为一个过去的时间来删除它。

$.cookie('name', null, { path: '/' }); // 删除名为 'name' 的 cookie

cookieSave.js

cookieSave.js   接下来 就是我自己封装的 拿过来可以直接使用

// 生成随机 AES 密钥的函数
function generateRandomKey() {
    const key = window.crypto.getRandomValues(new Uint8Array(32));
    return CryptoJS.lib.WordArray.create(key);
}
// 生成随机
function generateRandomString(length) {
    const key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!~@#$%^&*()_+-=';
    let result = '';
    const charactersLength = key.length;
    for (let i = 0; i < length; i++) {
        result += key.charAt(Math.floor(Math.random() * charactersLength));
    }
    return result;
}
// 加密数据的函数
function encryptData(data, secretKey) {
    const ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), secretKey  ).toString();
    return ciphertext;
}

// 解密数据的函数
function decryptData(ciphertext, secretKey) {
    const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
    const originalData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
    return originalData;
}


// 存储加密数据到cookie的函数
function storeEncryptedCredentials(loginNumber, loginPass, secretKey , lastTime) {
    const expirationDate = new Date(lastTime);
    expirationDate.setDate(expirationDate.getDate() + 2);
    const encryptedData = encryptData({ loginNumber, loginPass }, secretKey);
    Cookies.set('encryptedERPonWMSCredentials', encryptedData , { expires: expirationDate });
    Cookies.set('secretERPonWMSCKey', secretKey.toString() , { expires: expirationDate }); // 也可以存储密钥供之后解密使用
}

// 从cookie读取并解密数据的函数
function getDecryptedCredentials() {
    const encryptedData = Cookies.get('encryptedERPonWMSCredentials');
    const secretKey = Cookies.get('secretERPonWMSCKey');
    if (encryptedData && secretKey) {
        try {
            const decryptedData = decryptData(encryptedData, secretKey);
            return decryptedData;
        } catch (error) {
            erryor();
            // 清理无效的加密数据和密钥
            Cookies.remove('encryptedERPonWMSCredentials');
            Cookies.remove('secretERPonWMSCKey');
            console.error('Error decrypting credentials:', error);
            return null;
        }
    }
    return null;
}

// 尝试自动填充登录表单的函数
function tryAutoFillLoginForm() {
    const credentials = getDecryptedCredentials();
    if (credentials) {
        document.getElementById('LoginNumber').value = credentials.loginNumber;
        document.getElementById('password').value = credentials.loginPass;
    }
}

// 暴露给HTML调用的函数
function setAndEncryptCookie(loginNumber, loginPass , LastUpdateTime ) {
    const secretKey = generateRandomString(16);
    storeEncryptedCredentials(loginNumber, loginPass, secretKey ,LastUpdateTime);
}

;