taro本地开发接口调试以及cookies认证鉴权问题解决
Author:zhoulujun Date:
taro 在h5端调试,只需在 config/index.js h5配置项 增加
h5: {
publicPath: '/',
staticDirectory: 'static',
devServer: {
// host: 'dev.bkapps.oa.com',
disableHostCheck: true,
host: '0.0.0.0',
port: 10086,
proxy: [
{
context: ['weixin'],
target: "http://stag-dot-tgem.bkapps-sz.oa.com/",
changeOrigin: true,
secure: false,
ws: false,
}
]
}
}
webserver怎么配,具体查看:https://webpack.js.org/configuration/dev-server/
但是,如果是小程序调试,发现cookie 并没有发送。
Taro.request 默认不发送cookies,所以没有保持会话
具体查看:https://taro-docs.jd.com/taro/docs/apis/network/request/request
所以需要手动存储cookies,具体代码如下:
import Taro from '@tarojs/taro'
import { HTTP_STATUS } from '../constants/status'
import logError from '../utils/error'
import { publicUrl } from '../../env'
import { HttpResponse } from '../constants/commonType'
class Http {
requestQueue: Record<string, any> = {}
request(path: string, method, data: any, cancelToken) {
console.log('Taro.getStorageSync(\'cookies\')')
let cookies = Taro.getStorageSync('cookies')
const url: string = publicUrl + path
return new Promise((resolve, reject) => {
const source = Taro.request(
{
url,
data,
method,
mode: 'cors',
credentials: 'include',// 官方的文档说加个,但是并无卵用
xhrFields: {withCredentials: true},//带上cookies
header: {
'content-type': 'application/json', // 默认值
'Cookie': cookies
// 'Cookie': Taro.getStorageSync('Cookies')
},
success(response: Taro.request.SuccessCallbackResult & Res) {
console.log(response)
setCookie(response)
if (response.statusCode === HTTP_STATUS.NOT_FOUND) {
return logError('api', '请求资源不存在')
} else if (response.statusCode === HTTP_STATUS.BAD_GATEWAY) {
return logError('api', '服务端出现了问题')
} else if (response.statusCode === HTTP_STATUS.FORBIDDEN) {
return logError('api', '没有权限访问')
} else if (response.statusCode === HTTP_STATUS.AUTHENTICATE) {
Taro.clearStorage()
Taro.navigateTo({
url: '/pages/login/index'
})
return logError('api', '请先登录')
} else if (response.statusCode === HTTP_STATUS.SUCCESS) {
const res: HttpResponse = response.data
if (res.result) {
resolve(res.data)
} else {
reject(res)
Taro.showToast({
title: res.message,
icon: 'success',
duration: 2000
})
}
}
},
complete(res) {
console.log(res)
},
fail(res: Record<string, any>) {
logError('api', '请求失败', res)
console.log(res)
reject(
{
code: res.status,
result: false,
message: '网络请求失败',
}
)
}
},
)
if (cancelToken) {
//TODO
}
})
}
就这样,okay
不过,还是后台信不过单token认证呗
转载本站文章《taro本地开发接口调试以及cookies认证鉴权问题解决》,
请注明出处:https://www.zhoulujun.cn/html/webfront/AppDev/taro/8705.html