uni-app 微信小程序刷新token,无感登录

这篇具有很好参考价值的文章主要介绍了uni-app 微信小程序刷新token,无感登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

描述:

        后端token每5分钟刷新一次,需要给注册过的用户无感登录,当接口403或401后,刷新token并且重新发起所有403或401请求

我的实现

uniapp登录token,uni-app,前端,微信小程序

 参照:

// 此vm参数为页面的实例,可以通过它引用vuex中的变量
module.exports = (vm) => {
 
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = '/'; /* 根域名 */
		config.header = {
			
		}
		return config
	})
 
 
	// 请求队列
	let requestList = []
	// 是否正在刷新中
	let isRefreshToken = false
 
	// 请求拦截
	uni.$u.http.interceptors.request.use(async (config) => { // 可使用async await 做异步操作
 
		if (['DELETE'].includes(config.method)) {
			config.header = {
				...config.header,
				'content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
			}
		}
		config.header["Authorization"] = `Bearer ${uni.getStorageSync("accessToken")}`;
 
		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})
 
	// 响应拦截
	uni.$u.http.interceptors.response.use(async (response) => {
		if (response.data.msg === '刷新令牌已过期' || response.data.msg === '无效的刷新令牌') {
			
			return handleAuthorized(response.data)
		}
		if (response.data.code === 401) {
			// 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了
			if (!isRefreshToken) {
				isRefreshToken = true;
				let refreshToken = uni.getStorageSync("refreshToken")
				// console.log(refreshToken)
				// 1. 如果获取不到刷新令牌,则只能执行登出操作
				if (!refreshToken) {
					return handleAuthorized(response.data)
				}
				// 2. 进行刷新访问令牌
				try {
					const refreshTokenRes = await uni.$u.http.post(
						"/member/auth/refresh-token?refreshToken=" +
						uni.getStorageSync("refreshToken"))
					if (refreshTokenRes.code === 401) {
						return handleAuthorized(response.data)
 
					}
					// 2.1 刷新成功,则回放队列的请求 + 当前请求
					uni.setStorageSync("refreshToken", refreshTokenRes.data.refreshToken)
					uni.setStorageSync("accessToken", refreshTokenRes.data.accessToken)
 
					requestList.forEach(cb => cb())
 
					return new Promise(resolve => {
						resolve(uni.$u.http.request(response.config))
					})
				} catch (e) { // 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。
					// 2.2 刷新失败,只回放队列的请求
					requestList.forEach(cb => cb())
 
					// 提示是否要登出。即不回放当前请求!不然会形成递归
					return handleAuthorized(response.data)
				} finally {
					requestList = []
					isRefreshToken = false
				}
			} else {
				// 添加到队列,等待刷新获取到新的令牌
				return new Promise(resolve => {
					requestList.push(() => {
						resolve(uni.$u.http.request(response.config))
					})
				})
			}
		}
		uni.hideLoading()
		return response.data
	}, (response) => {
		console.error("网络异常")
		return Promise.reject(response)
	})
 
	function handleAuthorized(data) {
	
		uni.$u.toast('验证失败,请重新登录');
 
		// 函数节流
		uni.$u.throttle(() => {
			uni.reLaunch({
				url: '/pages/login/login'
			});
		}, 1000 * 10)
 
		return data
	}
 
}

参照链接uniapp+uview(luch-request)无痛刷新token - 掘金 (juejin.cn)文章来源地址https://www.toymoban.com/news/detail-616354.html

到了这里,关于uni-app 微信小程序刷新token,无感登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(77)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(42)
  • 【uni-app微信小程序】实现支付功能

    实现微信支付功能需要在小程序后台配置支付相关信息,并且在前端代码中调用微信支付API进行支付操作。好的, uni-app微信小程序实现支付功能整体流程 大致如下: 注册微信公众平台,并完成开发者资质认证; 在微信商户平台注册商户账号,并完成商户资质认证; 在商户

    2024年02月13日
    浏览(61)
  • uni-app 微信小程序 激励视频广告

    封装激励视频-Ad.js 调用上面写的方法:

    2024年02月12日
    浏览(54)
  • uni-app(微信小程序)获取当前位置uni.getLocation

     1、微信公众平台  开发  开发管理   2、开通之后到项目文件    3、下载腾讯地图插件并引入到文件中    

    2024年02月11日
    浏览(39)
  • uni-app微信小程序如何渲染markdown

    在开发个人网站微信登录平台易登微信小程序的时候,由于说明文档是用markdown格式来书写的,在网页上有各种markdown个人渲染引擎,比如这个markdown编辑器无敌了!。 但是在小程序上还是第一次渲染markdown,找了各种方案,但处处是坑,除此之外最后渲染出来的效果也惨不忍

    2024年02月16日
    浏览(44)
  • uni-app 微信小程序自定义导航栏

    上面的导航栏主要由状态栏(就是手机电量显示栏)和小程序的导航栏组成,android手机一般为48px,ios手机一般为44px 1、设置navigationStyle:custom 2、页面导航栏div 3、获取statusBarHeight高度 4、获取navTitleHeight的高度

    2024年02月14日
    浏览(36)
  • uni-app嵌入微信小程序原生代码

    使用uni-app有时需要用到微信小程序原生代码 解析: uni-app项目结构跟原生小程序的项目结构有着不一致的区别,如果说开发过程中必须要使用原生代码,就需要把原生代码作为组件的方式在uni-app项目中引入使用 官网为了应对这一个需求,就给出了以下方法,供开发者实现 wxcompone

    2024年02月05日
    浏览(48)
  • 微信小程序修改原生组件样式(uni-app)

    微信小程序修改原生组件样式 全局修改,直接将修改的样式写在全局的样式文件中; 特殊情况:修改swiper指示点样式时,需要包裹在swiper的样式选择器下才生效。 直接将下列代码放在全局样式中是不会生效的,需要加上swiper组件的元素选择器或swiper组件的其他样式名也可。

    2024年02月05日
    浏览(44)
  • [uni-app] 微信小程序 如何修改替换头像

     如下图所示,微信小程序中涉及到修改头像的交互 技术: 前端应用框架为uni-app UI框架为uView  思考: 1. 头像点击事件 click 2.从本地相册选择图片或使用相机拍照 uni.chooseImage(OBJECT) ,方法执行成功后根据success中返回的图片的本地文件路径列表 tempFilePaths,做操作 3.上传图片

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包