Pregunta

Integré CMS cómodos-mexicanos-sofá con mi aplicación Rails 3.0.9 con Omniauth 0.2.6 en su lugar.

Todo funciona bien del blog. Puedo iniciar sesión en CMS-Admin, trabajar con la consola de administración, hacer una publicación e iniciar sesión (CMS-Admin tiene su propio sistema de autenticación, diferente por mi aplicación ...), de lo que puedo navegar por la nueva publicación.

El problema es que el resto de mi aplicación, autentica a los usuarios con Omniauth, y cuando cierro/encendí obtengo el siguiente error:

Started GET "/auth/github" for 127.0.0.1 at 2011-07-25 21:04:46 +0200
  Processing by CmsContentController#render_html as HTML
  Parameters: {"cms_path"=>"auth/github"}
  SQL (0.3ms)  SELECT COUNT(*) FROM "cms_sites"
  Cms::Site Load (0.3ms)  SELECT "cms_sites".* FROM "cms_sites" LIMIT 1
Completed 500 Internal Server Error in 156ms

NoMethodError (undefined method `gsub!' for nil:NilClass):

Mi gemfile.lock está aquí: http://pastie.org/2270005

Cualquier ayuda será apreciada. Luca G. Soave

¿Fue útil?

Solución

Era un problema de enrutamiento.

Omniauth funciona detectando una página de error 404:

Si coincide con la ruta /auth /: proveedor, entonces capta la solicitud lo envía al proveedor

... pero CMS cómodos-mexicanos-sofá (me gusta refinería y otros), tiene una ruta de captura, por lo que la solicitud nunca devolvió un error 404, que Omniauth podría detectar.

En un caso cómodo-mexicano-sofá, pasa por "cms_path"=>"auth/github" consiguiendo

NoMethodError in CmsContentController#render_html
undefined method `gsub!' for nil:NilClass

En lugar de la ruta omniauth correcta que debería seguir como lo siguiendo:

Started GET "/" for 127.0.0.1 at 2011-07-25 22:27:26 +0200
  Processing by HomeController#index as HTML
Rendered home/index.html.haml within layouts/application (29.5ms)
Completed 200 OK in 44ms (Views: 42.8ms | ActiveRecord: 0.0ms)


Started GET "/auth/github" for 127.0.0.1 at 2011-07-25 22:27:35 +0200
MONGODB gitwatch_dev['users'].find({:provider=>"github", :uid=>1573})


Started GET "/auth/github/callback?code=4334bab983hd5fec19dd" for 127.0.0.1 at 2011-07-25 22:27:36 +0200
  Processing by SessionsController#create as HTML
  Parameters: {"code"=>"4334bab983hd5fec19dd", "provider"=>"github"}
Redirected to http://localhost:3001/
Completed 302 Found in 255ms
MONGODB gitwatch_dev['users'].find({:_id=>BSON::ObjectId('4e23114b1d41c80f180005b2')})


Started GET "/" for 127.0.0.1 at 2011-07-25 22:27:39 +0200
  Processing by HomeController#index as HTML
Rendered home/index.html.haml within layouts/application (415.6ms)
Completed 200 OK in 890ms (Views: 428.6ms | ActiveRecord: 0.0ms)

La solución en mi caso es como la siguiente:

en App/Controllers/errores_controller.rb

class ErrorsController < ApplicationController
  def error
    render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
  end
end

en config/rutas.rb agregar en la parte inferior

match '/auth/:provider' => 'errors#error'

... después de Omniouth Última ruta

`match "/auth/:provider/callback" => "sessions#create"`

Gracias a Federico Gonzalez y para Oleg Khabarov

Espero que esto ayude a alguien más ;-)

Adiós Luca G. Soave

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top