【工作实践-11】关于uniapp切换账号登录失败问题

遇到问题:在使用uniapp写的程序中,第一次打开程序登录(账号密码正确),调用登录接口,没有任何问题,正常登录;退出登陆后,输入不同的账号密码(账号密码均正确),调用登录接口提示登陆失败。很迷惑。

**揭露原因:**第一次登陆时查看接口详细信息,发现请求头中header携带的token为空,第二次用不同的账号密码登录时,接口请求头中header携带的token是第一次登录用户的token。前端在调用接口时,如果携带token,后端会通过判断token值来拦截请求,此时第一次的token与第二次登录用户的token不一致,所以导致登陆失败的结果。

**如何修改:**知道原因后,看了请求封装中的代码

javascript 复制代码
const isToken = withToken === false     // withToken表示此接口是否需要token
if (!isToken) {
			const token = uni.getStorageSync('AccessTokenKey')
			if (!token) {
				uni.showModal({
					title: '登录',
					content: '该功能需要登录后访问',
					showCancel: false,
					success(res) {
						if (res.confirm) {
							uni.reLaunch({
								url: `/pages/login/login`,
							})
						}
					}
				})
			} else {
				config.header['Authorization'] = `Bearer ${token}`
			}
		}

我们知道登录接口是不需要携带token的,所以登录接口中withToken值为false,此时不会进入上面对的 if 判断,即不会对config的header做任何处理。所以第一次登录不会有任何问题。

第一次登陆成功后,用户通过登录接口请求到了自己的token。退出登录后,第二个用户登录(账号密码均正确),即使此时withToken值依旧为false,但由于不进入 if 判断,没有对header做任何处理,所以此时的 header 依旧是上一个请求接口的 header 信息,token也是上一个用户的 token 信息,提示登录失败。

**修正代码:**对if判断添加else分支,并对header的token信息做置空操作

javascript 复制代码
        const isToken = withToken === false
		if (!isToken) {
			const token = uni.getStorageSync('AccessTokenKey')
			if (!token) {
				uni.showModal({
					title: '登录',
					content: '该功能需要登录后访问',
					showCancel: false,
					success(res) {
						if (res.confirm) {
							uni.reLaunch({
								url: `/pages/login/login`,
							})
						}
					}
				})
			} else {
				config.header['Authorization'] = `Bearer ${token}`
			}
		} else {
			config.header['Authorization'] = ''
		}

**收获:**在写 if 或其它任何条件分支的代码时,一定要综合考虑多种情况,争取尽可能的考虑完善,避免疏漏。

相关推荐
小离a_a29 分钟前
uniapp微信小程序实现拍照加水印,水印上添加当前时间,当前地点等信息,地点逆解析使用的是高德地图
微信小程序·小程序·uni-app
前端小雪的博客.1 小时前
uniapp小程序顶部状态栏占位和自定义头部导航栏
小程序·uni-app
2501_9160074720 小时前
iOS 证书如何创建,从能生成到能长期使用
android·macos·ios·小程序·uni-app·cocoa·iphone
00后程序员张1 天前
AppStoreInfo.plist 在苹果上架流程中的生成方式和作用
android·小程序·https·uni-app·iphone·webview
2501_915106321 天前
iOS App 测试方法,通过 Xcode、Instruments、Safari Inspector、克魔(KeyMob)等工具
android·ios·小程序·uni-app·iphone·xcode·safari
游戏开发爱好者81 天前
对 iOS IPA 文件进行深度混淆的一种实现路径
android·ios·小程序·https·uni-app·iphone·webview
百锦再1 天前
UniApp与UniApp X:跨平台开发的范式革命与全面技术解析
服务器·ai·uni-app·k8s·core·net
Change!!1 天前
uniapp写的h5,怎么根据页面详情,设置不同的标题
前端·uni-app·标题
2501_916007471 天前
Xcode 在 iOS 上架中的定位,多工具组合
android·macos·ios·小程序·uni-app·iphone·xcode
浅箬1 天前
uniapp 打包之后出现shadow-grey.png去除
前端·uni-app