当前位置:   article > 正文

uniapp解决token值无法使用的问题_uni-app app请求中不能再header中添加token

uni-app app请求中不能再header中添加token

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
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如图:
截图

这是封装的网络请求:

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)
            }
        })
    })
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

根据图片可以看出执行了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)
            }
        })
    })
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

这样就可以成功运行了
---

总结

为了解决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的获取、跨域问题和接口安全等方面的考虑,以提高请求的安全性和稳定性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/231314
推荐阅读
相关标签
  

闽ICP备14008679号