2015-01-21 66 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