2010-12-29 6 views
2

私は現在、私が構築している新しいRackアプリケーションにWardenを統合しています。私はrecent patchを実装して、セッションのシリアル化方法を指定できるようにしたいと思っています。具体的には、Rack::Session::Cookie::Identityをセッションプロセッサとして使用したいと考えています。ラックでカスタムCookieセッションシリアライザを使用するにはどうすればよいですか?

残念なことに、私のラックアップファイルにRack::Session::Cookieを設定するためにどのような構文を使用すべきかに関するドキュメントは少し不明です。誰かが私が間違っていることを教えてもらえますか?薄い

!! Unexpected error while processing request: undefined method `new' for #<Rack::Session::Cookie:0x00000110124128> 

PSから

config.ru

require 'my_sinatra_app' 

app = self 

use Rack::Session::Cookie.new(app, Rack::Session::Cookie::Identity.new), {:key => "auth_token"} 

use Warden::Manager do |warden| # Must come AFTER Rack::Session 
    warden.default_strategies :password 
    warden.failure_app Jelli::Auth.run! 
end 

run MySinatraApp 

エラーメッセージ:私は私の宝石の依存関係を管理するために、バンドラを使用していると私は同様に、ラックのmasterブランチを含めました希望のバージョンとして。

更新:以下のコメントに示唆されているとおり、私はdocumentationを読んでいます。悲しいことに、ドキュメントの提案された構文は機能しません。

更新:まだ私の最後に運がない;これを理解するのを助けることができる人に恩恵を提供する。

答えて

3
require 'my_sinatra_app' 

app = self 

session_app = Rack::Session::Cookie.new(app, { 
     :coder => Class.new { 
       def encode(str); str; end 
       def decode(str); str; end 
       }.new 
     }) 

use session_app 

run MySinatraApp 

私が持っていましたソースコードを見て、Rack :: Session :: Cookie :: Identityは次のように簡単です:

class Identity 
    def encode(str); str; end 
    def decode(str); str; end 
end 

tこれは十分です。私はそれを薄くして走ってきました。こんにちは世界のアプリを手に入れました - それは私が行った限りです。

+0

'app'変数に正確に何が含まれているかを明確にすることができますか? –

+0

申し訳ありません、これは 'require 'my_sinatra_app'に基づいたコードスニペットです。 app = self' – stef

+0

説明をありがとう。私はそれをもう少し詳しく説明していますが、 'session_appを使用する 'ことが、私を台無しにしていたものです。ラップアップファイル内で新しい 'Rack :: Session :: Cookie'クラスをインスタンス化すると、セッションアプリがラックスタックに追加されていることがわかりました。助けてくれてありがとう! –

1

あなたがラックのマニュアルを確認した場合::セッション::クッキー(https://github.com/rack/rack/blob/master/lib/rack/session/cookie.rb

あなたは何のinitializeメソッドが存在しない見ることができますし、それが使用することを提案:

use Rack::Session::Cookie, :key => 'rack.session', 
          :domain => 'foo.com', 
          :path => '/', 
          :expire_after => 2592000, 
          :secret => 'change_me' 
+0

悲しいことに、その構文は機能しません。私の問題は、 'Abstract :: ID'エンコーダーを内部的に使用しない' Rack :: Session :: Cookie'クラスの新しい(デフォルトでない)インスタンスが必要なことです。また、あなたが参照しているのと同じドキュメンテーションで、 'Rack :: Session :: Cookie :: Identity'を使って示唆している構文を見ることができます。これは現在私が使っているものです。 –

関連する問題