关于403错误的一种情况(两个状态码,一个成功,一个显示用户国企)

面签服务部分

问题再现

1、接口情况

/hngd/order/pre/info获取业务系统推送过来的订单信息

请求方式:POST

请求数据类型: application/json

请求示例:{ "key": "string", "remoteNumber": "string" }

请求参数说明:

vbnet 复制代码
key、remoteNumber分别对应/order/face/sign/{orderNum}接口响应得到的reroteKey、orderNumber

响应示例:

css 复制代码
{
  "code": 0,
  "data": {
    "hasCreated": true,
    "isExpired": true,
    "msg": "string",
    "preCreateOrderInfo": {
      "businessCode": "string",
      "businessField": [
        {
          "code": "string",
          "needNotarize": "string",
          "value": "string"
        }
      ],
      "comseqno": "string",
      "guaranteeCode": "string",
      "guaranteeName": "string",
      "loanBank": "string",
      "loanNumber": "string",
      "loginKey": "string",
      "orderClientQueryList": [
        {
          "address": "string",
          "clientCardNo": "string",
          "clientName": "string",
          "clientType": 0,
          "clientTypeName": "string",
          "gender": "string",
          "idCardBack": "string",
          "idCardFront": "string",
          "isMarry": "string",
          "phone": "string",
          "relationId": 0
        }
      ],
      "remoteNumber": "string"
    }
  },
  "errorMsg": "string"
}

2、问题情况

响应截图

network基本截图

第一张图中有一个要注意的点,后面需要改(request url后面多了个斜杠)

axios封装截图

通常来讲403问题是由于用户信息过期而无法访问所请求的资源,通常有一个状态码是我们所遇到的问题,这里有两个状态码,一个是status,一个是code,status为200表示请求成功,code为403表示用户信息过期,这里的原因在于错误的使用token,笔者大致讲一下问题的具体的业务场景

scss 复制代码
个贷项目主要有两大部分,一个是前面的录单服务部分,一个是后面的面签服务部分,两个服务后面可能一个再公众号,一个在小程序两个部分的接口请求不是在同一个网址下(暂时设置的是同一个域名下面,后面也许还会再做更改),这两个服务的token不是用的同一个。
所以这里产生问题的原因就在于说,因为是先做录单部分的,从录单部分登录,并且登录设置了Token,但是这个token和后面面签服务的Token不一样,后面进入面签服务也要进行一次登录,也许是"隐性登录"(这里是点击发起面签按钮,在这个按钮的点击事件中,增加了登录免登录的接口请求),但是笔者在做后面面签服务部分的接口请求的时候,仍然用的是前面录单服务部分的token,所以失败,这里两个状态码,虽然第一个状态码status显示200成功,但是第二个状态码code却一直报403错误(用户信息过期)

问题解决

获取业务系统推送过来的订单信息/hngd/order/pre/info接口是进入面签服务的开始,这个接口不需要token,后面面签服务的接口包括说登录免登录都基于业务系统推送过来的订单信息这个接口的返回值。

(这边也就是有一个注意:具体场景中,不是每个接口都一定需要token,比如这边的获取业务系统推送过来的订单信息/hngd/order/pre/info接口)

对axios封装的请求部分做更改

1、通过设置接口白名单,接口白名单中的路径不需要token

2、两个服务,跨域时候设置两个代理(/api代理录单服务部分的测试域名前缀,/fvurl代理面签服务部分的测试域名前缀),设置双token,通过判断url是哪一个服务的,从而引用不同的token

arduino 复制代码
const whiteList = [
  '/fvurl/hngd/order/pre/info'
]
request.interceptors.request.use(config => {
  NProgress.start()
  console.log('config*', config)
  // 如果在接口白名单当中,不设置token返回config
  if (whiteList.includes(config.url)) {
    console.log('接口在白名单当中')
    config.headers.device = 'app-h5'
    return config
  }
  const isToken = (config.headers || {}).isToken === false
  let token
  if (config.url.split('/').includes('fvurl')) {
    token = store.state.viewToken
  } else {
    token = store.state.orderToken
  }
​
  if (token && !isToken) {
    config.headers.token = token
  }
  config.headers.device = 'app-h5'
  console.log('token请求头', token)
  return config
}, error => {
  return Promise.reject(error)
})

这是遇到这种两个状态码,一种403问题的一种思路和场景。

相关推荐
Cachel wood8 分钟前
Django REST framework (DRF)中的api_view和APIView权限控制
javascript·vue.js·后端·python·ui·django·前端框架
放逐者-保持本心,方可放逐37 分钟前
SSE 流式场景应用 及 方案总结
javascript·axios·fetch·eventsource
白云~️1 小时前
uniappX 移动端单行/多行文字隐藏显示省略号
开发语言·前端·javascript
小华同学ai1 小时前
vue-office:Star 4.2k,款支持多种Office文件预览的Vue组件库,一站式Office文件预览方案,真心不错
前端·javascript·vue.js·开源·github·office
问道飞鱼2 小时前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
k09332 小时前
vue中proxy代理配置(测试一)
前端·javascript·vue.js
若川3 小时前
Taro 源码揭秘:10. Taro 到底是怎样转换成小程序文件的?
前端·javascript·react.js
IT女孩儿3 小时前
JavaScript--WebAPI查缺补漏(二)
开发语言·前端·javascript·html·ecmascript
@解忧杂货铺7 小时前
前端vue如何实现数字框中通过鼠标滚轮上下滚动增减数字
前端·javascript·vue.js
真的很上进12 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html