Oauth导致更多权限问题

时间:2018-08-07 13:42:18

标签: google-apps-script google-oauth google-contacts

几个月来我一直在努力解决这个问题,而且情况越来越糟。

我在Google Apps脚本中有一个简单的程序,该程序可以从工作表中获取电子邮件地址,并将其放入相应的Google联系人组中。直到一个月左右才停止工作,它就可以正常工作。

请帮助我

1)了解我是否真的需要使用API​​来完成我正在做的事情。

2)在下面检查我的工作,以防我遗失某些东西。

原始问题:

运行此代码时,出现错误消息:“您无权执行该操作。”

function testAddEmail(){

ContactsApp.createContact(null, null, "tomfoolery@validemailaddress.com");

};

要解决此问题,我已经: -确保在我的Cloud Console中启用了Contacts API。 -禁用并重新启用它多次。 -使用该程序创建了一个新文件,并启用了新的Contacts API。 -为新计划创建凭证(此凭证在此日期之后有效了一天)。 -与Google Cloud支持和G Suite支持联系,以确保设置正确(它们不支持脚本或联系人。)

问题2:

我尝试添加Oauth 2代码,但现在它给了我错误“您无权调用getActiveSpreadsheet。”

他们的问题在下面的我的Oauth 2代码中吗? (我删除了我的个人信息。)

function getContactsService() {
  // Create a new service with the given name. The name will be used when
  // persisting the authorized token, so ensure it is unique within the
  // scope of the property store.
  return OAuth2.createService('contacts')

      // Set the endpoint URLs, which are the same for all Google services.
      .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')

      // Set the client ID and secret, from the Google Developers Console.
      .setClientId('blablabla.apps.googleusercontent.com')
      .setClientSecret('blablabla')

      // Set the name of the callback function in the script referenced
      // above that should be invoked to complete the OAuth flow.
      .setCallbackFunction('authCallback')

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getUserProperties())

      // Set the scopes to request (space-separated for Google services).
      .setScope('https://www.google.com/m8/feeds')
      .setScope('https://www.googleapis.com/auth/spreadsheets')

      // Below are Google-specific OAuth2 parameters.

      // Sets the login hint, which will prevent the account chooser screen
      // from being shown to users logged in with multiple accounts.
      .setParam('login_hint', Session.getActiveUser().getEmail())

      // Requests offline access.
      .setParam('access_type', 'offline')

      // Forces the approval prompt every time. This is useful for testing,
      // but not desirable in a production application.
      .setParam('approval_prompt', 'force');
}

1 个答案:

答案 0 :(得分:0)

  1. 您是否登录了多个Google帐户?这通常会导致授权问题。尝试注销所有内容,然后重新登录到一个帐户。

  2. 这是在触发器上运行还是您在手动运行公式?

  3. 电子表格的所有者是所有者吗?您是否正在电子表格的容器绑定脚本中运行此测试?

  4. 如果您是电子表格的所有者,并且只是将自己的电子表格中的电子邮件地址添加到自己的Gmail帐户中,则无需使用API​​或OAuth协议。

  5. 正如另一位评论者所述,您要求的范围是什么?要仅从电子表格中设置一个简单的脚本来添加联系人,您可能只需要列出的两个即可。您可以通过选择视图->显示清单文件来手动设置它们。例如:

     Serving Flask app "hello_world" (lazy loading)
     * Environment: production
     WARNING: Do not use the development server in a production environment.
     Use a production WSGI server instead.
     * Debug mode: on
     * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: 985-433-141