首页 > 编程语言 >uniapp实现加密Token并在每次请求前动态更新(vue、微信小程序、原生js也通用!)

uniapp实现加密Token并在每次请求前动态更新(vue、微信小程序、原生js也通用!)

时间:2024-12-03 13:59:37浏览次数:6  
标签:uniapp vue return 请求 微信 token js Token CryptoJS

导语:在Web开发中,Token作为一种身份验证的机制,被广泛应用于前后端交互过程中。本文将为大家介绍如何在每次请求前动态设置加密的Token,并在请求一次后使Token值加1(或其他动态改变的逻辑),从而提高系统的安全性。

一、背景知识

  1. Token简介 Token是一种身份验证的令牌,通常由服务器生成,客户端在每次请求时携带Token,服务器通过验证Token的有效性来判断请求是否合法。

  2. 为什么要动态设置Token? 动态设置Token可以有效防止恶意请求,提高系统的安全性。通过在每次请求前更新Token,即使Token被泄露,也无法在下次请求中使用。

  3. 为什么Token要加密?Token是用户身份的凭证,如果Token在传输过程中被截获,攻击者可能会利用这个Token进行非法操作。因此,对Token进行加密是提高系统安全性的重要措施。

二、实现思路

  1. 生成初始Token 在用户登录成功后,服务器生成一个初始Token并使用CryptoJS加密,并将其发送给客户端。

  2. 客户端存储Token 客户端在收到Token后,将其存储在本地(如localStorage、cookie等)。

  3. 每次请求前更新Token 在发起请求前,客户端从本地获取Token并使用CryptoJS解密,并将其值加1,然后再加密后更新本地存储的Token。

  4. 服务器验证Token 服务器在接收到请求后,验证Token的有效性。若Token有效,则处理请求;否则,拒绝请求。

三、具体实现

以下是在uniapp中的实现示例代码,如果你用的是Vue、微信小程序或者原生js也都是通用的,逻辑思路都一样,只是实现代码有些许差别。

1、安装CryptoJS

npm install crypto-js

2、在utils文件夹中新建一个获取token的js文件

import CryptoJS from 'crypto-js'
import {
	BASE_URL
} from './request.js'
// 解密函数
function decryptAES(encryptedMessage, secretKey) {
	var bytes = CryptoJS.AES.decrypt(encryptedMessage, secretKey);
	return bytes.toString(CryptoJS.enc.Utf8);
}


// 加密函数,包含配置项
function encryptAES(message, secretKey) {
	let config = {
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
		iv: CryptoJS.enc.Utf8.parse('你的密钥')
	};
	return CryptoJS.AES.encrypt(message, secretKey, config).toString();
}

// 获取token
export const getToken = () => {
	return new Promise(async (resolve, reject) => {
		const TOKEN= getCookie('TOKEN')
        // 如果没有,就先从后端获取
		if (!TOKEN) {
			try {
			 const token = await getTokenFromServer()
             setCookie('TOKEN', token)
             resolve(token)
			} catch (e) {
				reject(e)
			}
		}
		const key = CryptoJS.enc.Utf8.parse('你的密钥');
		const token= encryptAES(TOKEN, key)
		resolve(token)
	})

}

// 从后端获取Token
function getTokenFromServer() {
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASE_URL + '/auth/terminals',
			method: 'get',
			success: (res) => {
				resolve(res.data)
			},
			fail: (err) => {
				console.log(err)
				reject(err)
			}
		})
	})

}

// 获取cookie
function getCookie(name) {
	let arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
	if (arr = document.cookie.match(reg)){
        let res = decryptAES(arr[2],'你的密钥')
		setCookie(name, ++res)
			return unescape(res);
	}
	else{
		return null
	}
		
}

// 设置cookie(不设置过期时间)
function setCookie(name, value) {
	document.cookie = name + "=" + escape(value);
}

3、在发送请求的文件中引入使用 

import {getToken} from './getToken.js'

...
...
uni.request({
				url: BASE_URL + url, //请求路径
				data: data, //请求参数
				method: item, //请求方法
				header: { //请求头
					RequestId: await getToken(),  // 此处动态获取token并设置请求头
					 ...config.header
				},
				// 成功
				success: function(res) {}
            })

 

标签:uniapp,vue,return,请求,微信,token,js,Token,CryptoJS
From: https://blog.csdn.net/Jiaberrr/article/details/144209200

相关文章

  • Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合
    Vue团队欣喜地宣布,Vue3.5(代号TengenToppaGurrenLagann)于9月初发布!本次小版本更新并未引入任何破坏性更改,带来了诸多内部优化以及新功能。在这篇文章中,我们将重点介绍一些新特性和改进。如需了解全部更新内容,请参阅GitHub上的完整更新日志。最近突然想整理一些前......
  • 微信小程序上传后无法访问,https证书安装后访问“使用了不受支持的协议”
    https证书安装后,使用IE访问正常,使用谷歌访问提示:“使用了不受支持的协议”。因此微信小程序也无法访问。 问题原因该问题是由于IIS服务器端未开启TLS1.2加密套件所导致的。解决方案通过以下两种方法,解决IIS服务器安装了SSL证书后无法访问谷歌浏览器的问题。使用IIS加密套......
  • 即时通讯技术文集(第45期):微信、QQ技术精华合集(Part2) [共14篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第45 期。[-1-]  QQ音乐团队分享:Android中的图片压缩技术详解(上篇)[链接] http://www.52im.net/thread-1208-1-1.html[摘要] 朋友圈的数据是永远存储的,而且随着业务的快速发展,存......
  • 用Java和Vue写的个人股票分析系统
    轻量级股票数据中台简单易用的数据中台,服务于韭皇的可自控应用,方便二次开发;无复杂数据库依赖,启动即可得,追求至简,方便韭皇部署;外部接口可扩展,与核心功能隔离,可快速切换服务使用场景搭建自己的选股平台,分析数据私有化保存,二次开发私有化指标,自定义选股策略;当时编写程序的初......
  • 中药分类管理系统|Java|SSM|VUE| 前后端分离
    【重要1⃣️】前后端源码+万字文档+部署文档【重要2⃣️】正版源码有问题包售后             【包含内容】【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频                    ......
  • 冷冻仓库管理系统|Java|SSM|VUE| 前后端分离
    【重要1⃣️】前后端源码+万字文档+部署文档【重要2⃣️】正版源码有问题包售后             【包含内容】【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频                    ......
  • 【uniapp】轮播图
    前言Uniapp的swiper组件是一个滑块视图容器组件,可以在其中放置多个轮播图或滑动卡片。它是基于微信小程序的swiper组件进行封装,可以在不同的平台上使用,如微信小程序、H5、App等。效果图前端代码swiper组件<template><viewclass="banner-content"><swiperclass=......
  • vue基础之6:计算属性、姓名案例、简写计算属性
    欢迎来到“雪碧聊技术”CSDN博客!在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目......
  • 【精品毕设推荐】基于微信小程序的学生知识成果展示与交流设计与实现
    点击下载原文及代码,可辅助在本地配置运行......
  • Y20030041 java+mysql基于微信小程序的阅读器的设计与实现 源代码 配置 文档
    基于微信小程序的阅读器1.项目描述2.目的和意义3.项目功能结构4.界面展示5.源码获取1.项目描述当计算机在人们生活的各个领域迅速曼延之时,人们获取信息的方式也更加的直接迅速,网络化使信息领域变得更为广泛,在也没有了时间和空间的限制。人们获取信息大部分是通过网......