uniapp解决token值无法使用的问题

 更新时间:2023年10月25日 09:39:34   作者:思恋那个她  
这篇文章主要给大家介绍了如何使用uniapp解决token值无法使用的问题,文中给大家详细介绍了产生原因和解决方案,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

项目场景:

uniapp项目中从服务器获取数据

问题描述

在请求中携带token参数,运行是显示请求失败

这是主要代码:

async getInfo() {
	const res = await this.$myRequest({
		url: '/prod-api/api/common/user/getInfo',
		header: {
			'Authorization': uni.getStorageSync('token') // 在请求头中添加token参数
		},
	})
	console.log(res.data.user);
	this.personalInfo = res.data.user
},

如图:

这是封装的网络请求:

const BASE_URL = '这里填实际的地址'
export const myRequest = (options) => {
    return new Promise((resolve, reject) => {
        uni.request({
            url: BASE_URL + options.url,
            method: options.method || 'GET',
            data: options.data || {},
            success: (res) => {
                if (res.data.code !== 200) {
                    return uni.showToast({
                        title: "获取数据失败"
                    })
                }
                resolve(res)
            },
            fail: (err) => {
                uni.showToast({
                    title: "请求接口失败"
                })
                reject(err)
            }
        })
    })
}

根据图片可以看出执行了fail这块代码

原因分析:

在代码中,请求头是通过options.header传递的,这里封装了一个myRequest方法来发送请求,但是在调用该方法时,并没有正确地将header参数传递到实际的请求中。因为封装的方法里面没有header参数,所以实际请求也不会传递这个参数。

因此,服务器并不会收到传递的Authorization参数,导致请求失败。

解决方案:

为了解决这个问题,需要对封装的myRequest方法进行修改。具体做法是,在调用uni.request时,将options.header作为一个参数传递进去,以便在请求中包含正确的请求头信息。

下面是修改后的代码示例:

const BASE_URL = '这里填实际的地址'
export const myRequest = (options) => {
    return new Promise((resolve, reject) => {
        uni.request({
            url: BASE_URL + options.url,
            method: options.method || 'GET',
            data: options.data || {},
            header: options.header || {}, // 将header参数传递给request方法
            success: (res) => {
                if (res.data.code !== 200) {
                    return uni.showToast({
                        title: "获取数据失败"
                    })
                }
                resolve(res)
            },
            fail: (err) => {
                uni.showToast({
                    title: "请求接口失败"
                })
                reject(err)
            }
        })
    })
}

这样就可以成功运行了

总结

为了解决uniapp项目中请求失败的问题,我们对封装的网络请求方法进行了修改。在分析后发现,原封装方法未正确传递header参数到实际请求中,导致服务器无法获取Authorization参数,进而导致请求失败。

所以我们优化了myRequest方法的代码,将options.header作为参数传递给uni.request方法,确保请求头信息正确传递。通过这样的修改,成功将Authorization参数传递到请求头中,服务器能够正确识别用户身份,并成功处理请求。

在处理涉及token参数的请求时,需要注意以下关键知识点:

  1. 请求头(Header):请求头是HTTP协议的一部分,用于向服务器传递附加信息。在本场景中,我们需要将token作为Authorization参数添加到请求头中。

  2. 封装网络请求方法:为了方便复用和管理代码,我们封装了myRequest方法来发送请求和处理响应。

  3. 参数传递:在封装的myRequest方法中,我们确保正确地将header参数传递给实际的请求,通过将options.header作为参数传递给uni.request方法来实现。

  4. 异步操作:由于网络请求是异步操作,我们使用了async/await语法来等待请求完成后再获取数据,避免在数据未返回时进行后续操作。

此外,还需要注意以下几点:

  1. token的获取:通常使用uni.setStorageSync()方法将token值存储在本地缓存中,然后使用uni.getStorageSync()方法获取token值,并将其添加到请求头中。

  2. 跨域问题:如果请求的服务器与当前页面所在的域名不同,会出现跨域问题。为了解决这个问题,可以使用uni.request方法的withCredentials参数,并在服务器端设置Access-Control-Allow-Origin头部字段,或使用uni.request方法的proxy参数进行接口代理。

  3. 接口安全:在发送请求时,确保接口地址正确,并只向可信的服务器发送请求。同时,避免在代码中直接暴露敏感信息,如密码等。

为确保请求头中包含所需的token参数,我们可以在封装网络请求方法时将token作为参数传递进来,并在myRequest方法中将其添加到header中。这样做的好处是代码更灵活,方便在不同场景下使用不同的token值,同时提高代码的安全性。

另外,需要注意的是,在请求头中携带token参数时,服务器端需要进行相应的验证,以确保用户身份的合法性。例如,可以在服务器端对token进行解密和验证,以确保token是由合法用户生成的,从而有效防止恶意攻击和非法访问。

综上所述,解决这个问题的关键是在封装的网络请求方法中正确传递header参数,以确保请求头中包含所需的token参数,从而能够顺利从服务器获取数据。同时,注意token的获取、跨域问题和接口安全等方面的考虑,以提高请求的安全性和稳定性。

以上就是uniapp解决token值无法使用的问题的详细内容,更多关于uniapp解决token值无法使用的资料请关注脚本之家其它相关文章!

相关文章

最新评论