Разработка и проверка подлинности Facebook в Rails 3.1 - PullRequest
2 голосов
/ 08 сентября 2011

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

Я получаю ссылку Войти через Facebook, но, нажав на нее, я получаю следующую ошибку, сообщающую, что что-то не так с маршрутами

Неизвестное действие

Не удалось найти отображение устройства для пути"/ пользователей / аутентификации / facebook".Может быть, вы забыли обернуть свой маршрут в блоке объема?Например: devise_scope: user действительно соответствует "/ some / route" => "some_devise_controller" end

Вот мой файл маршрутов

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
  get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
  root :to => 'home#index'

Редактировать:

Решил эту проблему, изменив маршруты на

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } do
  get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
root :to => 'home#index'

Теперь я получил следующую ошибку, заставив работать аутентификацию Facebook, но когда возвращаюсь с "Разрешить экран приложения", выдает рубин ...

неопределенный метод `closed? 'для nil: NilClass

activesupport (3.1.0.rc8) lib / active_support / whiny_nil.rb: 48: в method_missing' /opt/local/lib/ruby/1.8/net/http.rb:1060:in запрос 'Фарадей (0.6.1) lib / faraday / adapter / net_http.rb:51: in call' faraday (0.6.1) lib/faraday/request/url_encoded.rb:14:in call 'faraday (0.6.1) lib / faraday / request.rb: 88: in run' faraday (0.6.1) lib/faraday/request.rb:28:in run' faraday (0.6.1) lib / faraday / connection.rb: 170: in run_request' oauth2 (0.4.1) lib/oauth2/client.rb:63:inrequest '

...

Это использует Rails 3.1.0rc8 и ruby ​​1.9.2

1 Ответ

2 голосов
/ 08 сентября 2011

Вчера я только что закончил свой омниаут-логин для моего приложения, используя точно такое же руководство и рельсы 3.1 final

Не уверен, что вы правильно сделали свои маршруты, мои выглядят так:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } do
  get 'sign_in', :to => 'users/sessions#new', :as => :new_user_session
  get 'sign_out', :to => 'users/sessions#destroy', :as => :destroy_user_session
end

devise_scope :user do
  get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end

В своем блоке devise_for :users я ставлю вход и выход, потому что я использую OmniAuth без других аутентификаций

В руководстве также сказано, что строка get '/users/auth/:provider' должна быть в devise_scope :user

Не уверен, что это решит вашу проблему, но по крайней мере я хотел изложить эти моменты, которые не вписываются в комментарий

...