2012-02-22 20 views
7

Intentando migrar mi aplicación desde Rails 3.0 a 3.2, y como parte de esto también estoy actualizando la gema Devise. Resultó que el nuevo Devise requiere una nueva joya OmniAuth. Tengo la autorización de Facebook configurada con OmniAuth. Después de leer la guía de migración, agregué también la gema omniauth-facebook y la configuré en devise.rb.Migrando a OmniAuth 1.0: método indefinido `user_omniauth_authorize_path '

Ahora estoy recibiendo este error:

ActionView::Template::Error (undefined method `user_omniauth_authorize_path' for #<#:0x00000003b01e88>)

yo estaba usando este camino para el botón de inicio de sesión de Facebook. ¿Qué debería usar ahora?

modelo de usuario contiene este (user.rb):

# Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, :lockable and :timeoutable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, 
     :omniauthable 

registro del servidor completo:

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' 

Actualización: Ok, me las arreglé para conseguir resolver este problema de ruta. Ahora cuando hago clic en el botón de inicio de sesión de Facebook, obtengo esto:

Started GET "https://stackoverflow.com/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' 

Todo esto es un poco confuso. El problema de la ruta se resolvió después de que especifiqué los parámetros de facebook correspondientes a este tutorial: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview. Ahora también noté que me faltaba omniauth.rb de la carpeta config/initializers, que se menciona en la wiki de omniauth-facebook. He creado omniauth.rb con el siguiente contenido, pero que sigue recibiendo el mismo problema:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, ENV['APP_ID'], ENV['APP_SECRET'] 
    end 
+0

¿Puede el PASE StackTrace completa? – shingara

+0

Registro de servidor agregado –

+0

¿Ha agregado omniauthable en su modelo de Usuario? – shingara

Respuesta

5

he resuelto este problema mediante la ejecución de diseñar generadores de nuevo. Los dos archivos que necesitarían ser verificados son: config/routes.rb y models/user.rb

En el archivo routes.rb, habrá un duplicado 'devise_for' en la parte superior y el usuario.rb tendrá módulos de diseño predeterminados, por lo que deberá agregarse 'omniauthable' aquí.

+0

¡Gracias, intentaré esto! –

+0

¿Te refieres a estos generadores? '> rails genera el servicio de modelo user_id: integer provider: string uid: string uname: string uemail: string > rails genera los servicios de controlador' –

+0

Todavía tengo los mismos problemas. La ejecución de rutas de rake tampoco incluye esta ruta. Me pregunto dónde se especificó esta ruta originalmente. –

4

Lugar legado: omniauthable en el usuario model.Currently mis versiones son legado 2.0.4, 1.1.0 OmniAuth & OmniAuth-facebook 1.2.0

+0

perfecto ... me salvaste el día ... gracias – Dave