当前位置: 首页 > 知识库问答 >
问题:

谷歌日历:错误:超出未经验证使用的每日限制

尉迟明辉
2023-03-14

我试图遵循google文档中提供的google日历api nodejs示例(https://developers.google.com/calendar/quickstart/nodejs)若要访问我的主要谷歌日历事件,我会收到以下错误:“超出了未经验证使用的每日限制。继续使用需要注册。”

我知道我正在正确地通过OAuth流程,因为我的具有日历访问权限的项目列在这里:https://myaccount.google.com/permissions?pli=1.

这是我的范围:

const SCOPESAUTH = [
'https://www.googleapis.com/auth/calendar',
'https://www.googleapis.com/auth/calendar.readonly',
'https://www.googleapis.com/auth/calendar.events'

];

在OAuth同意屏幕选项卡中的开发人员控制台中,我没有设置本节中的范围:“Google API的范围”当我尝试设置它们时,它说谷歌必须批准对这些敏感范围的访问。但是,同意屏幕没有显示:“未经验证的应用程序”该应用程序正在开发中,而不是生产中。

谷歌的文档说:“dailyLimitExceeded错误表明您的项目已经达到了礼节性API限制。”在开发人员控制台的配额页面上,我的使用记录为0。我已经启用了Google日历API。

以下是OAuth云函数:

    const functionsOauthClient = new OAuth2Client(CONFIG_CLIENT_ID, CONFIG_CLIENT_SECRET,
    FUNCTIONS_REDIRECT);

// visit the URL for this Function to request tokens
exports.authgoogleapi = functions.https.onRequest((req, res) => {
    // req.query.id === device id of the user
    res.set('Cache-Control', 'private, max-age=0, s-maxage=0');
    res.redirect(functionsOauthClient.generateAuthUrl({
        access_type: 'offline',
        scope: SCOPESAUTH,
        prompt: 'consent',
        state: req.query.id
    }));
});


// redirect URI
exports.oauthcallback = functions.https.onRequest(async (req, res) => {
    res.set('Cache-Control', 'private, max-age=0, s-maxage=0');
    const code = req.query.code;
    try {
        const {tokens} = await functionsOauthClient.getToken(code);
        // store the tokens for retrieval by client app that is then sent to the getEvents cloud cloud unction
        admin.database().ref(`Devices/${req.query.state}/api_tokens`).set(tokens);
        return res.status(200).send('App successfully configured with new Credentials.');
    } catch (error) {
        return res.status(400).send(error);
    }
});

对oAuthallback的调用返回状态200。

下面是引发错误的代码。注释,要求。身体令牌是在OAuth流中生成的,保存到Firebase,然后作为参数传递给这个google云函数。

    exports.getEvents = functions.https.onRequest((req, res) => {
      ...

      const authClient = new OAuth2Client(CONFIG_CLIENT_ID, CONFIG_CLIENT_SECRET, FUNCTIONS_REDIRECT);
      authClient.setCredentials(req.body.token);
      const calendar = google.calendar({version: 'v3', authClient});
      return calendar.events.list({
          calendarId: 'primary',
          timeMin: (new Date()).toISOString(),
          maxResults: 10,
          singleEvents: true,
          orderBy: 'startTime',
      }, (err, result) => {...

有什么建议吗?谢谢

共有1个答案

申屠泉
2023-03-14

我发现了问题所在。

const calendar = google.calendar({version: 'v3', authClient})

应该是:

const calendar = google.calendar({version: 'v3', auth: authClient})
 类似资料:
  • 我希望我的应用在用户的 Google 日历上添加/删除/更新事件。应用只需删除和更新应用本身已添加的事件。 我是否正确地理解了这一点,为了使其正常工作,用户必须向应用程序授予对其Google日历的完全访问权限,这意味着该应用程序可能会读取和删除任何日历上的私人事件? 或者,有没有办法限制用户对应用程序的访问权限,例如,允许应用程序创建单个日历,只允许它访问该日历上的事件? 我已经通读了相关的谷歌日

  • 接下来,我生成了自己的OAuth2客户机ID并使用它。这种方法很简单,直到我开始收到来自Google的“匿名使用过期”错误,一段时间后我意识到这是因为密钥没有启用只读日历范围。 我的下一个想法是公开日历,并使用静态API密钥,但日历是从一个名为Peak Pro的预订服务中同步的,该服务用参加活动的客户的姓名、电子邮件和电话号码填充日历描述。我不能公开揭露那些。 接下来,我被吸引到了CalDAV A

  • 我收到了这个错误 已经跟踪了https://developers.google.com/admin-sdk/directory/v1/guides/delegation 我使用这个库,并在laravel 5.7:https://github.com/spatie/laravel-google-calendar上运行它 有什么办法可以解决这个问题。请帮忙。

  • 有没有办法只要求“插入”访问用户的Google日历? 有一个范围:“https://www . Google APIs . com/auth/calendar . events”让我的应用程序对一个用户的所有日历事件拥有完全的读/写权限,但这似乎有些过头了,很可能会让我的用户对我的应用程序的操作产生不信任。

  • {“摘要”:“我的新日历名称”} 谷歌回答(大约20秒后): {“错误”:{“错误”:[{“域”:“全局”,“原因”:“backenderror”,“消息”:“后端错误”}]“代码”:503,“消息”:“后端错误”}} 谷歌答案(大约5秒后):200日历被创建

  • 是否有人有链接或可以提供Java谷歌应用程序引擎项目的代码,该项目只是与谷歌日历交互。假设从日历中获取活动。 Google Sample calendar-app engine-Sample在从HG检出后无法编译,我曾尝试搜索教程并创建自己的教程,只是运气好而已。 我已经设置了一个 API 访问项目来获取客户端机密.json。