Как использовать куки в промежуточном программном обеспечении стойки?
Я использую Ruby on Rails 3, и я хотел бы использовать метод cookies.signed
в промежуточном программном обеспечении Rack. Мне нужно это, потому что я хотел бы аутентифицировать пользователя непосредственно в промежуточном программном обеспечении, чем использовать before_filter
в файле application_controller.rb
.
Например, если я использую этот метод в контроллере следующим образом:
cookies.signed[:user_id']
Я получаю
---
- 1 # This is the id of the current signed in user
- a64ee3asdtjhcc7b35fcb280956be00ba27f94d48dfe4291c06db7d57577d5893 # This is the cookie salt
но если я использую это в промежуточном программном обеспечении Rack (того же приложения) следующим образом:
request = Rack::Request.new(env)
request.cookies.signed[:user_id']
Я получаю
NoMethodError
undefined method `signed' for #<Hash:0x00000103333d40>
Итак, , как я могу использовать этот метод в промежуточном программном обеспечении? Как я могу получить идентификатор пользователя, чтобы я мог его аутентифицировать?
Может быть, мне нужно включить \extend, например, ActionDispatch... если да, то как?
Ответы
Ответ 1
Похоже, вы должны это сделать:
request = ActionDispatch::Request.new(env)
request.cookie_jar.signed[:user_id] #=> 1
Вы можете проверить .../action_dispatch/middleware/cookies.rb на github, чтобы больше узнать о том, что происходит.
Ответ 2
Уже инициализированная банка файлов cookie присутствует в хеше env
.
env['action_dispatch.cookies'].signed[:user_id]
Приведенный выше пример эквивалентен вызову ниже в контексте экземпляра ActionController::Base
:
cookies.signed[:user_id]