Пытаюсь перенести свое приложение с Rails 3.0 на 3.2 , и в рамках этого я также обновляю гем Devise. Оказалось, что для нового Devise требуется новый гем OmniAuth . У меня авторизация в Facebook настроена с помощью OmniAuth . Прочитав руководство по миграции, я добавил также гем omniauth-facebook и настроил его в devise.rb.
Теперь я получаю эту ошибку:
ActionView :: Template :: Error (неопределенный метод user_omniauth_authorize_path для # )
Я использовал этот путь для кнопки входа в Facebook. Что мне теперь использовать?
Модель пользователя содержит это (user.rb):
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable
Полный журнал сервера:
Started GET "/" for 127.0.0.1 at 2012-02-22 10:39:27 +0200
Processing by PagesController#guardian as HTML
[paperclip] Duplicate URL for photo with /system/:attachment/:id/:style/:filename. This will clash with attachment defined in Asset class
Rendered pages/guardian.html.erb within layouts/application (955.6ms)
Completed 500 Internal Server Error in 1245ms
ActionView::Template::Error (undefined method `user_omniauth_authorize_path' for #<#:0x00000003b01e88>):
30:
31:
32:
33: <%= link_to "Login with Facebook", user_omniauth_authorize_path(:facebook), :class => "login_with_facebook_button" %>
34:
35:
36:
app/views/pages/guardian.html.erb:33:in `_app_views_pages_guardian_html_erb___1979224720320394612_27892940'
Обновление: Хорошо, мне удалось решить эту проблему с путями. Теперь, когда я нажимаю кнопку входа в Facebook, я получаю следующее:
Started GET "/users/auth/facebook" for 127.0.0.1 at 2012-02-23 16:02:01 +0200
NoMethodError (undefined method `include?' for nil:NilClass):
omniauth (1.0.2) lib/omniauth/strategy.rb:165:in `call!'
omniauth (1.0.2) lib/omniauth/strategy.rb:148:in `call'
warden (1.1.1) lib/warden/manager.rb:35:in `block in call'
warden (1.1.1) lib/warden/manager.rb:34:in `catch'
warden (1.1.1) lib/warden/manager.rb:34:in `call'
Все это немного сбивает с толку. Проблема пути решена после того, как я указал параметры: facebook в соответствии с этим руководством: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview . Теперь я также заметил, что мне не хватает файла omniauth.rb из папки config / initializers, которая упоминается в вики omniauth-facebook. Я создал файл omniauth.rb со следующим содержимым, но все еще сталкиваюсь с той же проблемой:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['APP_ID'], ENV['APP_SECRET']
end