我正在使用Capacitor将一个Web应用程序转换为iOS格式。我正在使用Axios向Google API发出请求,尽管在浏览器中工作完美,但我的请求在iOS版本上返回了错误403。
下面是从身份验证到进行第一次API调用的流程(我将capacitor-google-auth用于iOS OAuth,然后将从中获得的访问令牌传递给Axios,用作HTTP请求的头部)。
到目前为止,我使用了以下资源:https://github.com/CodetrixStudio/CapacitorGoogleAuth,https://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环境之外工作得很好。
1条答案
按热度按时间mftmpeh81#
所以在回顾了一下这一点之后,我了解到电容器应用程序有HTTP限制。更改我的请求客户端以使用电容器社区HTTP模块是有效的。
https://capacitorjs.com/docs/apis/http