数か月前、oauth2 を使用して Google で認証する Rails アプリを作成しました。具体的には、omniauth-google-oauth2 gem です。認証を作成して更新トークンを保存するためのすべての手順を実行しましたが、最近、oauth2 が応答の一部として「refresh_token」を送り返すのをやめました。当初、次のような応答を受け取りました。
credentials: {
refresh_token: XXX,
token: YYY,
expires_at: 1374840767,
expires: true
},
これで、1 時間以内に有効期限が切れるトークンのみが返されます。
credentials: {
token: YYY,
expires_at: 1374840767,
expires: true
},
これを変更するためにアプリケーション側で何をしたのか本当にわからないので、Googleで何かが変わったのか、それとも私がしたことなのかはわかりません。コンテキストについては、私のコードは次のようになります。
初期化子/omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, 'KEY', 'SECRET', {:scope => "userinfo.email,userinfo.profile,analytics.readonly,adsense.readonly"}
end
authentications_controller.rb は、応答を受け取る場所です。
def create
auth = request.env["omniauth.auth"]
params = request.env["omniauth.params"]
project = Project.find(params['project_id'])
Authentication.create(:project_id => project.id, :provider => auth['provider'], :uid => auth['uid'], :access_token => auth['credentials']['refresh_token'])
flash[:notice] = "Authentication successful."
redirect_to owner_view_project_path(project)
end
私のinitializers/omniauth.rbファイルに何かが欠けている可能性はありますか? オプション ハッシュに以下を追加しようとしましたが、リフレッシュ トークンが返されないようです。
:approval_prompt => "force", :access_type => "offline"
どんな助けでも大歓迎です!前もって感謝します!