Rails 3.1 アプリにdevise 1.5.3
、omniauth 1.0.1
、およびomniauth-github 1.0.1
があります。
config/initializers/devise.rb
config.omniauth :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
config/routes.rb
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
キーとシークレットを Heroku 変数として設定し、アプリケーションを Github に登録します。リンクをクリックすると、Github に送信され、認証されてから、コードと認証が成功したすべての情報とともに Github コールバック ルートに送り返されます。
users/omniiauth_callbacks
問題は、コントローラーの障害メソッドによってピックアップされていることです。が返送された put
内容を確認するために、いくつかのステートメントを追加しました。env['omniauth']
env['omniauth.auth']
想定されているGithubからのすべての情報があります。
env['omniauth.error'].response
ただしOAuth2::Response
、多くの情報が含まれています。重要な部分は次のとおりです。
@parsed={"error"=>"bad_verification_code"}, @error=#<OAuth2::Error: OAuth2::Error>
Github に新しい v3 APIが追加されたので、この投稿がまだ有効かどうか疑問に思っています。
必要なコードをコールバック コントローラーの失敗メソッドに入れることもできますが、それは汚いとハックのように感じます。
どんな提案でも大歓迎です。