我可以使用下面提到的代码成功将事件推送到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
我的问题:
不管令牌是否过期,每次尝试推送事件时刷新令牌都是一个好习惯吗?
使用刷新令牌生成访问令牌是否有限制?
答案 0 :(得分:0)
如果访问令牌未过期,则没有理由强制刷新访问令牌。这样做对您的应用来说是低效的(用户必须等待另一个HTTP呼叫),并且极端情况(不断刷新或每次调用API)都可能导致Google出现5xx错误。
如果rails库上的ruby正在为您自动处理刷新,我建议您完全让它为您处理刷新。这些库通常由知道OAuth处理最佳实践的Google员工编写。