2011-01-30 26 views
19

¿Alguien había instalado la gema Devise con Sinatra?Idear con Sinatra

Devise está basado en Warden y debería funcionar en Sinatra, no pude encontrar ninguna información relacionada sobre cómo implementarlo.

+0

Es bastante centrado en los rieles: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/confirmations_controller.rb – scragz

Respuesta

22

Diseñar es realmente envoltorio sólo un Rieles-céntrico con buenos ayudantes para warden, que es el marco de autenticación del estante subyacente . Entonces, si está utilizando Sinatra junto con Rails, puede usar Devise en su aplicación Rails, y usar warden directamente en su aplicación Sinatra, y ellos verán los mismos datos de sesión de usuario.

Así que no, no puedes usar Devise directamente en tu aplicación Sinatra, pero si estás construyendo una aplicación modular con algunas piezas en Rails y otras piezas en Sinatra, puedes usar Devise/Warden entre los componentes.

4

Pude hacerlo funcionar. Había unos pocos aspectos principales:

  1. Cómo Diseñar trabajar con Rails (Diseñar es una aplicación Rails, no funcionará sin ella)
  2. instalación de la aplicación (ruta) en el nivel de rack para apoyar ambos rieles y Sinatra
  3. compartir los rieles y las sesiones entre Sinatra
  4. Configuración Warden y ponerlo a disposición de Sinatra

He aquí parte más relevante del código de /config.ru:

# 

    # ... 

    # Rest with Rails 
    map "/" do 
     run MyApp::Application 
    end 

    # Anything urls starting with /slim will go to Sinatra 
    map "/slim" do 

     # make sure :key and :secret be in-sync with initializers/secret_store.rb initializers/secret_token.rb 
     use Rack::Session::Cookie, :key => '<< see, initializers/secret_store.rb >>', :secret => '<< copy from initializers/secret_token.rb >>' 

     # Point Warden to the Sinatra App 
     use Warden::Manager do |manager| 
     manager.failure_app = AppMain 
     manager.default_scope = Devise.default_scope 
     end 

     # Borrowed from https://gist.github.com/217362 
     Warden::Manager.before_failure do |env, opts| 
     env['REQUEST_METHOD'] = "POST" 
     end 

     run AppMain 
    end 

Consulte, http://labnote.beedesk.com/sinatra-warden-rails-devise para una solución completa.

+0

Deberías haber desarrollado tu aplicación en Rails – AMBasra

+0

@AMBasra, necesitaba un marco más simple para desarrollar una API CRUD, Sinatra parecía una herramienta del tamaño adecuado para las tareas. –

+0

Quise decir que estás ejecutando el servidor Rails con tu aplicación. Entonces no es más ligero. ¿Por qué utilizar dos marcos si puede hacer todo en uno? El entorno de producción también estaría ejecutando tanto rieles como sinatra. – AMBasra