Миграция на OmniAuth 1.0: неопределенный метод user_omniauth_authorize_path - PullRequest
7 голосов
/ 22 февраля 2012

Пытаясь перенести мое приложение с Rails 3.0 на 3.2 , и как часть этого я также обновляю гем Devise. Оказалось, что новый Devise требует нового OmniAuth драгоценного камня. У меня авторизация на Facebook настроена с OmniAuth . После прочтения руководства по миграции я также добавил гем omniauth-facebook и настроил его в devise.rb.

Теперь я получаю эту ошибку:

ActionView :: Template :: Error (неопределенный метод `user_omniauth_authorize_path 'для # <#: 0x00000003b01e88>)

Я использовал этот путь для кнопки входа в 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 #<#<Class:0x00000003b213f0>:0x00000003b01e88>):
    30:     </p>
    31:             </td>
    32:             <td>
    33:             <%= link_to "Login with Facebook", user_omniauth_authorize_path(:facebook), :class => "login_with_facebook_button" %>
    34:             </td>
    35:         </tr>
    36:     </table>
      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

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

Я решил эту проблему, снова запустив генератор устройств Два файла, которые необходимо проверить: config / rout.rb и models / user.rb

В файле rout.rb справа вверху будет дубликат «devise_for», а в файле user.rb будут использоваться модули разработки по умолчанию, поэтому здесь нужно будет добавить «omniauthable».

4 голосов
/ 13 апреля 2012

Место разработки: всевозможная модель пользователя. В настоящее время мои версии разработка 2.0.4, omniauth 1.1.0 и omniauth-facebook 1.2.0

...