ruby 得到错误,我需要有作家访问此日历,(谷歌::Apis::ClientError)

waxmsbnn  于 2023-03-08  发布在  Ruby
关注(0)|答案(1)|浏览(93)
    • 已解决**

Google工作空间日历共享设置的更改大约花了2个小时才生效。
修复方法是与服务帐户共享日历并授予其管理事件的权限。
当我试图通过脚本创建事件时,我一直收到"您需要对此日历具有作家访问权限。(Google::Apis::ClientError)"错误。
我已完成并确保以下事项:

  • 服务帐户在Google Workspace中具有域范围访问权限
  • 已确认它也具有正确的身份验证访问权限(
  • 服务帐户在Google Cloud上具有"编辑者"角色和权限
  • 允许外部电子邮件共享日历的Google Workspace设置

我现在很困惑,希望能给我一些建议.
代码如下:

OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
CREDENTIALS_PATH = File.join(File.dirname(__FILE__), 'credentials.json')
SCOPE = Google::Apis::CalendarV3::AUTH_CALENDAR_EVENTS
APPLICATION_NAME = "GCAL Events"

def authorize
    credentials = Google::Auth::ServiceAccountCredentials.make_creds(
      json_key_io: File.open(CREDENTIALS_PATH),
      scope: SCOPE
    )
    credentials.fetch_access_token!
    credentials
    
  end

  def create_event(summary, start_time, end_time)
    service = Google::Apis::CalendarV3::CalendarService.new
    service.client_options.application_name = APPLICATION_NAME
    service.authorization = authorize
  
    event = Google::Apis::CalendarV3::Event.new({
      summary: summary,
      start: {
        date_time: start_time,
        time_zone: 'Pacific/Auckland'
      },
      end: {
        date_time: end_time,
        time_zone: 'Pacific/Auckland'
      }
    })
  
    
    result = service.insert_event('email@mydomain.com', event)
    puts "Event created: #{result.html_link}"
  end

  
  create_event('xyz', '2023-03-03T09:00:00+12:00', '2023-03-03T10:00:00+12:00')

在Google Workspace中的其他用户的日历上创建活动

ny6fqffe

ny6fqffe1#

您需要告诉服务帐户要委派为域中的哪个用户。

authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: StringIO.new(File.read AppConfig[:credentials_file]),
  scope: AppConfig[:cal_scope]).dup
authorizer.sub = @person
authorizer.fetch_access_token!

相关问题