use*_*052 13 ruby cookies rack ruby-on-rails ruby-on-rails-3
我正在使用Ruby on Rails 3,我想cookies.signed
在Rack中间件中使用该方法.我需要这个,因为我想直接在中间件中验证用户,而不是before_filter
在application_controller.rb
文件中使用.
例如,如果我以这种方式在控制器中使用该方法:
cookies.signed[:user_id']
Run Code Online (Sandbox Code Playgroud)
我明白了
---
- 1 # This is the id of the current signed in user
- a64ee3asdtjhcc7b35fcb280956be00ba27f94d48dfe4291c06db7d57577d5893 # This is the cookie salt
Run Code Online (Sandbox Code Playgroud)
但如果我在这个方式的Rack中间件(同一个应用程序)中使用它:
request = Rack::Request.new(env)
request.cookies.signed[:user_id']
Run Code Online (Sandbox Code Playgroud)
我明白了
NoMethodError
undefined method `signed' for #<Hash:0x00000103333d40>
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能在中间件中使用该方法呢?如何获取用户ID以便我可以对其进行身份验证?
也许我必须包含\ extend,例如,ActionDispatch ...如果是这样,怎么样?
eri*_*ric 19
看起来你应该能够做到这一点:
request = ActionDispatch::Request.new(env)
request.cookie_jar.signed[:user_id] #=> 1
Run Code Online (Sandbox Code Playgroud)
您可以在github上查看.../action_dispatch/middleware/cookies.rb,详细了解正在发生的事情.
小智 5
env
哈希中已存在一个已初始化的cookie jar 。
env['action_dispatch.cookies'].signed[:user_id]
Run Code Online (Sandbox Code Playgroud)
上面的示例等效于在ActionController::Base
实例上下文中调用下面的示例:
cookies.signed[:user_id]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6997 次 |
最近记录: |