2015-01-21 63 views
1

我使用的是宝石 'omniauth,谷歌-的oauth2'刷新令牌不被发送

#initializers/omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider(:google_oauth2, 'client_id', 'client_secret') 
end 

然后

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def google_oauth2  
    @user = User.find_for_google_oauth2(request.env['omniauth.auth'], current_user) 
    #... 

然后我得到这个

request.env['omniauth.auth'][:credentials] 
=> {"token"=> "some token", "expires_at"=>1421821319, "expires"=>true} 

我在想,刷新标记在哪里?根据文档

access_type:默认为脱机,因此刷新令牌发送为 当用户不在浏览器中时使用。可在线设置为 。

但它没有发送,是吗?

回答

2

我想你指的是文档中的omniauth-google-oauth2自述文件。它还说,“如果你需要刷新令牌,谷歌要求你也指定选项提示:'同意',这不是默认的”。所以请尝试将提示选项传递给提供者方法。

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider(:google_oauth2, 'client_id', 'client_secret', { prompt: 'consent' }) 
end 
+0

它在哪里说的? – 2015-01-21 06:29:08

+0

在https://github.com/zquestz/omniauth-google-oauth2#configuration中解释access_type – tyamagu2 2015-01-21 06:37:10