关于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问题的一种思路和场景。

相关推荐
gCode Teacher 格码致知12 分钟前
Javascript提高:Math.round 详解-由Deepseek产生
开发语言·javascript
织_网15 分钟前
Nest.js:Node.js后端开发的现代企业级解决方案,赋能AI全栈开发
javascript·人工智能·node.js
kyriewen22 分钟前
可选链 `?.`——再也不用写一长串 `&&` 了!
前端·javascript·ecmascript 6
AnalogElectronic24 分钟前
html+js+css实现七龙珠神龙召唤特效
javascript·css·html
Highcharts.js26 分钟前
React 应用中的图表选择:Highcharts vs Apache ECharts 深度对比
前端·javascript·react.js·echarts·highcharts·可视化图表·企业级图表
梵得儿SHI35 分钟前
Vue 3 工程化实践:多页面路由配置 + Pinia 状态管理完全指南
前端·javascript·vue.js·vuerouter4·pinia状态管理的·模块化store设计·路由与状态管理
lxh011337 分钟前
电话号码的字母组合
java·javascript·算法
遗憾随她而去.44 分钟前
react学习(一)
javascript·学习·react.js
Cobyte1 小时前
5.响应式系统比对:手写 React 响应式状态库 Mobx
前端·javascript·vue.js
鹓于1 小时前
PPT VBA随机选题系统实现详解
java·前端·javascript