Как использовать куки в промежуточном программном обеспечении Rack? - PullRequest
13 голосов
/ 17 марта 2011

Я использую 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>

Итак, как я могу сделать возможным использование этого метода в промежуточном программном обеспечении? Как я могу получить идентификатор пользователя, чтобы я мог это подтвердить?


Может быть, мне нужно включить \ расширить, например, ActionDispatch ... если да, то как?

Ответы [ 2 ]

19 голосов
/ 20 марта 2011

Похоже, вы должны быть в состоянии сделать это:

  request = ActionDispatch::Request.new(env)
  request.cookie_jar.signed[:user_id] #=> 1

Вы можете проверить ... / action_dispatch / middleware / cookies.rb на github, чтобы узнать больше оименно то, что происходит.

5 голосов
/ 18 января 2013

В хеше env присутствует уже инициализированный файл cookie.

env['action_dispatch.cookies'].signed[:user_id]

Пример выше эквивалентен вызову ниже в контексте экземпляра ActionController::Base:

cookies.signed[:user_id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...