2011-04-12 8 views
10

Por alguna razón, las variables de sesión no se están configurando en mi aplicación. Estoy usando Sinatra 1.2.1.Sinatra y variables de sesión que no se configuran

Aquí es una pieza de código: no se está estableciendo

module GitWiki 
    class App < Sinatra::Base 

    configure do 
     enable :sessions 

     set :app_file, __FILE__ 
     set :root, File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) 

     set :auth do |bool| 
     condition do 
      redirect '/login' unless logged_in? 
     end 
     end 
    end 

    helpers do 
     def logged_in? 
     not @user.nil? 
     end 
    end 

    error PageNotFound do 
     page = request.env["sinatra.error"].name 
     redirect "/#{page}/edit" 
    end 

    before do 
     content_type "text/html", :charset => "utf-8" 
     @user = session[:user] 
    end 

    get "/login/?" do 
     erb :login 
    end 

    post "/login" do 
     user = User.get 
     if user.authenticate(params[:username], params[:password]) 
     session[:user] = params[:username] 
     p session # => {:user=>"root"} 
     else 
     # AZIZ! LIGHT! 
     end 

     redirect '/' 
    end 

    get "/" do 
     p session # => {} 
     redirect "/" + GitWiki.homepage 
    end 

    # ... 
    end 
end 

Como se puede ver, session[:user], o más bien el hash sesión se restablece después de cada petición. ¿Alguien sabe lo que está pasando, por favor?

Respuesta

26

Si está usando la escopeta, añada la siguiente línea al bloque de configuración:

set :session_secret, "My session secret" 

citar RKH, mantenedor actual de Sinatra:

[Escopeta] reiniciará el servidor en el cada solicitud, regenera el secreto de sesión y así invalida tus sesiones. Esto ha sido arreglado en el maestro actual. Solución simple: establezca la opción session_secret.

NOTA: esta solución no funciona si se utiliza Rack::Session::Pool

+0

de Doc de Sinatra: "Sin embargo, dado que este secreto cambiará con cada inicio de su aplicación, es posible que desee establecer el secreto usted mismo ... " – imwilsonxu

+0

mucho mejor, gracias aziz. – pje

+0

Me gusta la "NOTA", ¿sabe por casualidad quién solucionará esto con 'Rack :: Session :: Pool'? –

Cuestiones relacionadas