axios 在电容器中请求Google API时出现错误403

tgabmvqs  于 2022-11-23  发布在  iOS
关注(0)|答案(1)|浏览(122)

我正在使用Capacitor将一个Web应用程序转换为iOS格式。我正在使用Axios向Google API发出请求,尽管在浏览器中工作完美,但我的请求在iOS版本上返回了错误403。
下面是从身份验证到进行第一次API调用的流程(我将capacitor-google-auth用于iOS OAuth,然后将从中获得的访问令牌传递给Axios,用作HTTP请求的头部)。
到目前为止,我使用了以下资源:https://github.com/CodetrixStudio/CapacitorGoogleAuthhttps://developers.google.com/calendar/api/v3/reference/calendarList/list
我在“capacitor.config.json”中的GoogleAuth插件设置(我还将REVERSED_CLIENT_ID的URL方案添加到我的info.plist文件中,如CapacitorGoogleAuth文档所述):

"plugins": {
    "GoogleAuth": {
      "scopes": [
        "https://www.googleapis.com/auth/calendar"
      ],
      "clientId": <<my iOS Client ID>>
    }
  }

使用“index.js”启动应用程序时,获取访问令牌(works):

import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth'
const axios = require('axios')

const token = await GoogleAuth.signIn()
const response = await axios
  .request({
    method: 'GET',
    url: 'https://www.googleapis.com/calendar/v3/users/me/calendarList',
    headers: {
      Authorization: `Bearer ${token.authentication.accessToken}`
    },
    params: {
      key: <<My API Key>>
    }
  })
  .catch(err => console.log(err))
console.log(response)

此时,它会掷回这个错误:

{
  "message": "Request failed with status code 403",
  "name": "AxiosError",
  "config": {
    "transitional": {
      "silentJSONParsing": true,
      "forcedJSONParsing": true,
      "clarifyTimeoutError": false
    },
    "transformRequest": [null],
    "transformResponse": [null],
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "maxBodyLength": -1,
    "env": { "FormData": null },
    "headers": {
      "Accept": "application/json, text/plain, */*",
      "Authorization": "Bearer <<My access token>>"
    },
    "method": "get",
    "url": "https://www.googleapis.com/calendar/v3/users/me/calendarList",
    "params": { "key": <<My Api key>> }
  },
  "code": "ERR_BAD_REQUEST",
  "status": 403
}

为什么iOS会出现这种情况?证书在某种程度上有问题吗?Google API不允许来自Capacitor应用程序的HTTP请求吗?如果有任何帮助,我将不胜感激,因为我很难理解。这段代码在iOS环境之外工作得很好。

mftmpeh8

mftmpeh81#

所以在回顾了一下这一点之后,我了解到电容器应用程序有HTTP限制。更改我的请求客户端以使用电容器社区HTTP模块是有效的。
https://capacitorjs.com/docs/apis/http

相关问题