使用刷新令牌生成访问令牌的查询

时间:2014-02-08 17:23:07

标签: ruby-on-rails google-calendar-api google-api-client

我可以使用下面提到的代码成功将事件推送到Google日历中。每次我尝试推送事件时,以下控制器代码都会刷新令牌。它工作正常。

 class Add2gcalendarController < ApplicationController

  before_filter :authenticate_user!   
  def push  
       event = {'summary' => 'Appointment','location' => 'Somewhere','start' => {'dateTime' => '2014-06-03T10:00:00.000-07:00'},'end' => {'dateTime' => '2014-06-03T10:25:00.000-07:00'}}
          client = Google::APIClient.new
          client.authorization.client_id =ENV["GOOGLE_KEY"]
          client.authorization.client_secret = ENV["GOOGLE_SECRET"]
          client.authorization.grant_type = 'refresh_token'
          client.authorization.refresh_token = saved_refresh_token
          client.authorization.fetch_access_token!  
          service = client.discovered_api('calendar', 'v3')                   
          @result = client.execute(
        :api_method => service.events.insert,
        :parameters => {'calendarId' => 'primary'},
        :body => JSON.dump(event), # where cal is the object containing at least "summary".
        :headers => {'Content-Type' => 'application/json'})

 end

我的问题:

  1. 不管令牌是否过期,每次尝试推送事件时刷新令牌都是一个好习惯吗?

  2. 使用刷新令牌生成访问令牌是否有限制?

1 个答案:

答案 0 :(得分:0)

如果访问令牌未过期,则没有理由强制刷新访问令牌。这样做对您的应用来说是低效的(用户必须等待另一个HTTP呼叫),并且极端情况(不断刷新或每次调用API)都可能导致Google出现5xx错误。

如果rails库上的ruby正在为您自动处理刷新,我建议您完全让它为您处理刷新。这些库通常由知道OAuth处理最佳实践的Google员工编写。