2012-01-29 4 views
4

У меня есть приложение Rails 3.1 с devise 1.5.3, omniauth 1.0.1 и omniauth-github 1.0.1.Devise omniauth-github oauth2 error «bad_verification_code»

конфигурации/Инициализаторы/devise.rb

config.omniauth :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'] 

конфигурации/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 с кодом и всей информацией, которую выполнил auth.

Проблема заключается в том, что она поднимается методом отказа контроллера 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 теперь имеет свою new v3 API.

Можно было бы просто поместить код, который мне нужен, в метод отказа контроллера обратного вызова, но он чувствует себя грязным и хакерским.

Любые предложения были бы очень признательны.

ответ

0

Я не совсем уверен, что это поможет, но только вчера, когда я пытался аутентифицироваться с помощью github, используя камень omniauth, я получал те же ошибки.

В конце концов, я закончил работу с github путем отправки client_id, client_secret и redirect_uri в /github.com/oauth/authorize и получил обратный вызов на redirect_uri.

Heres the link

+0

С благодарностью! Итак, вы перенаправили бы фазу обратного вызова на urautu urify снова вместо https://github.com/login/oauth/access_token? – LupineDev

+0

отправьте запрос на указанный вами URL, а затем получите обратный вызов по указанному uri, который является необязательным снова. – ktkaushik