未发送刷新令牌

时间:2015-01-21 05:29:26

标签: ruby-on-rails devise oauth-2.0 google-api omniauth

我正在使用gem' omniauth-google-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:默认为离线,因此会发送刷新令牌   当用户不在浏览器中时使用。可以设置为   在线。

但它没有被发送,是吗?

1 个答案:

答案 0 :(得分:2)

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

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