2011-04-12 10 views
10

Herhangi bir nedenden dolayı, uygulama değişkenlerim uygulamamda ayarlanmıyor. Sinatra 1.2.1 kullanıyorum. Her istekten sonraSinatra ve ayarlanmayan oturum değişkenleri

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 

Gördüğünüz gibi, session[:user] ayarlı değil, daha doğrusu seans karma ediliyor sıfırlama: Burada

bir kod parçasıdır. Neler olduğunu bilen var mı lütfen?

cevap

26

Eğer Shotgun kullanıyorsanız, configure bloğuna aşağıdaki satırı ekleyin:

set :session_secret, "My session secret" 

RKH alıntı için, Sinatra'nın geçerli sürdürücü:

[Shotgun] üzerindeki sunucuyu yeniden başlar Her istek, böylece oturum sırrını yeniden oluşturur ve böylece oturumlarınızı geçersiz kılar. Bu mevcut master'da düzeltildi. Basit düzeltme: session_secret seçeneğini ayarlayın.

NOT: Eğer Sinatra'nın Doc itibaren Rack::Session::Pool

+0

kullanırsanız Bu düzeltme çalışmaz: "Ancak bu gizli uygulamanın her başlamasıyla değişecek çünkü, sen ayarlamak isteyebilirsiniz Kendini sakla ... " – imwilsonxu

+0

çok daha iyi, teşekkürler aziz. – pje

+0

"NOT" u beğeniyorum, bunu kiminle değiştireceğimi biliyor musunuz? Rack :: Session :: Pool'? –