我目前正在将Warden集成到我正在构建的新Rack应用程序中。我想对Rack实现一个recent patch,允许我指定会话的序列化方式;具体来说,我想使用Rack::Session::Cookie::Identity
作为会话处理器。
不幸的是,关于在我的rackup文件中配置Rack::Session::Cookie
应使用什么语法的文档有点不清楚,这里的任何人都可以告诉我我做错了吗?
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
来自瘦 的 错误消息
PS:我正在使用bundler管理我的gem依赖项,我同样也将rack的master分支作为所需的版本。 更新:根据以下评论中的建议,我已阅读documentation;遗憾的是,文档中建议的语法不起作用。 更新:我的结局仍然没有运气;向任何可以帮我解决这个问题的人提供赏金。 !! Unexpected error while processing request: undefined method `new' for #<Rack::Session::Cookie:0x00000110124128>
答案 0 :(得分: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
那么这应该足够了。我运行它很薄,我得到一个你好世界的应用程序 - 这就是我去的。
答案 1 :(得分:1)
如果您查看Rack :: Session :: Cookie(https://github.com/rack/rack/blob/master/lib/rack/session/cookie.rb)
的文档你可以看到没有初始化方法,它建议使用:
use Rack::Session::Cookie, :key => 'rack.session',
:domain => 'foo.com',
:path => '/',
:expire_after => 2592000,
:secret => 'change_me'