Подтвердить что ты не робот

Как использовать куки в промежуточном программном обеспечении стойки?

Я использую 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... если да, то как?

4b9b3361

Ответ 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]