第3方token有问题

8/1/2023

# 问题的现象

第 3 方服务相关功能访问 F12 提示超流量或 403 错误等,造成功能无法正常使用。

# 问题的原因

百度、高德、天地图等第 3 方需要 token,目前平台内是我们申请了演示的 token 内置在平台中,但因为我们平台使用用户较多,访问量容易超限量或误判为爬虫被封, 目前包括以下第 3 方服务(非必须,看自己项目选用的功能):

# 解决方法及步骤

请在自己项目中根据用到的服务情况,申请下自己的 key 或 token 后进行修改替换,主要做 2 类修改:

目前所有第3方涉及token的类均支持传入key或token参数来设置。如果未传入参数时,平台使用了内置的的mars3d.Token.* (opens new window)默认值。

# 1. 覆盖mars3d.Token中默认值

此方式适合所有类都未传入入key或token参数的情况,改一处全局生效,也建议项目中按这种方式处理。

(1)如果构造map是通过config.json,可以按下面示例增加token配置。

{
  "scene":{},//已忽略其他参数值
  "method":{ //method是V3.7及之后版本存在,V3.6及之前去掉method这一层   
    "token":{
      "tianditu":"e5c3984ced09bc1f55e8e1107fdc5a6b",
      "baidu":"jTqhUqeeRirqd8musUiYmthqdHDHsiB2",
      "gaode":"ee24b622294b5bc659fb92fe81084776",
      "ion":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2NjkxN2Y5Ni0wZjgyLTQyZDEtODEzNS0zYTlkN2UwMmU3OTciLCJpZCI6NTM1NDIsImlhdCI6MTYxOTIzMDkzMH0.S3x2FMdIx98KuCq8vN_gkC_PArveXJ5bPBNZ3CEYgtc",
      "mapbox":"pk.eyJ1IjoiY25zdW55b3VyIiwiYSI6ImNsMmN5Y2ppaDB0ZGYzam8yZmF2MjVqb3cifQ.FYxirkiZsriqaFw_x0IyAw",
      "bing":"Am5SdKm6pNdkP1P5zuUOMZwleCHeA7GD5vuQgZ3xBUbEMBeQ5cQ1WN4B8xqqV1Vt"
    }
  },
  "terrain": {},//已忽略其他参数值
  "basemaps": [],
  "layers": []
} 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

(2) 如果构造mars3d.Map是代码构造的参数,可以按下面示例增加token参数。

let map = new mars3d.Map("mars3dContainer", {
  //已忽略其他参数
  method: {//method是V3.7及之后版本存在,V3.6及之前去掉method这一层
    token: {
      tianditu: "e5c3984ced09bc1f55e8e1107fdc5a6b",
      baidu: "jTqhUqeeRirqd8musUiYmthqdHDHsiB2",
      gaode: "ee24b622294b5bc659fb92fe81084776",
      ion: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2NjkxN2Y5Ni0wZjgyLTQyZDEtODEzNS0zYTlkN2UwMmU3OTciLCJpZCI6NTM1NDIsImlhdCI6MTYxOTIzMDkzMH0.S3x2FMdIx98KuCq8vN_gkC_PArveXJ5bPBNZ3CEYgtc",
      mapbox: "pk.eyJ1IjoiY25zdW55b3VyIiwiYSI6ImNsMmN5Y2ppaDB0ZGYzam8yZmF2MjVqb3cifQ.FYxirkiZsriqaFw_x0IyAw",
      bing: "Am5SdKm6pNdkP1P5zuUOMZwleCHeA7GD5vuQgZ3xBUbEMBeQ5cQ1WN4B8xqqV1Vt",
    },  
  },
});
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2:批量替换修改key参数值

如果相关配置或代码中使用了key参数,就需要全局批量替换下,可以复制已有key值,打开项目后全局全字匹配后批量替换。

(1)我们以天地图 key 为例,假设:

  • 原有示例中的 key 为 789e558be762ff832392a0393fd8a4f1
  • 自己申请的 key 为 d083e4cf30bfc438ef93436c10c2c20a

可以批量替换789e558be762ff832392a0393fd8a4f1d083e4cf30bfc438ef93436c10c2c20a


{
  "scene": {},
  "terrain": {},//已忽略其他参数
  "basemaps":[    
    {
      "name": "天地图影像",
      "type": "group",
      "layers": [
        {
          "name": "底图",
          "type": "tdt",
          "layer": "img_d",
          "key": ["d083e4cf30bfc438ef93436c10c2c20a"]
        },
        {
          "name": "注记",
          "type": "tdt",
          "layer": "img_z",
          "key": ["d083e4cf30bfc438ef93436c10c2c20a"]
        }
      ],
      "show": true
    }
  ],
  "layers":[]
}

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
27
28

(2)如果是js代码中,比如下面的GaodeRoute 类 (opens new window)使用代码,可以批量替换ae29a37307840c7ae4a785ac905927e0ee24b622294b5bc659fb92fe81084776

  • 在使用的类中参考API增加key参数:
gaodeRoute = new mars3d.query.GaodeRoute({
  key: ["ae29a37307840c7ae4a785ac905927e0"],
});


//未传入key参数,内部使用了默认值。如果未解决 也可以按需修改代码,增加key值。
gaodeRoute = new mars3d.query.GaodeRoute();
1
2
3
4
5
6
7
最后更新: 9/4/2024, 5:14:46 PM