У меня есть приложение 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 / rout.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 .
Можно было бы просто поместить нужный мне код вметод отказа контроллера обратного вызова, но он выглядит грязным и хакерским.
Буду признателен за любые предложения.