Отправка HTTPOnly cook ie в ответ с помощью приложения Rails API - PullRequest
0 голосов
/ 14 января 2020

Поправьте меня, если я ошибаюсь, но куки - это просто особые Set-Cookie: заголовки, верно? Может быть, я что-то упускаю, но мне всегда казалось, что это так. Если я настрою приложение Rails API и захочу поддержать отправку файлов cookie HTTPOnly (например, заголовки также предполагают, что у меня есть CORS и все, что есть в настройке клиента и т. Д. c), я смогу сделать это правильно?

В основном, мои вопросы таковы:

  1. Неужели возвращение ActionDispatch::Cookies в мое промежуточное ПО и добавление include ::ActionController::Cookies в мой контроллер приложений полностью разрушает цель приложения API?
  2. Если да, могу ли я просто отправить HTTPOnly cook ie через заголовки вручную?
  3. И если это так, то гораздо сложнее управлять заголовками cook ie вручную? Это то, что я получаю, оставляя промежуточное программное обеспечение повара ie без необходимости обрабатывать их вручную, если все, что мне действительно нужно, это отправить один HTTPOnly refre sh токен?

1 Ответ

0 голосов
/ 21 января 2020

Так что мне не нужно добавлять какое-либо промежуточное программное обеспечение или включать какие-либо классы для файлов cookie. Я могу использовать reponse.set_header, чтобы отправить повара ie. Тем не менее, это позволяет вам отправлять только один заголовок Set-Cookie, поскольку он будет перезаписывать последний заголовок, который вы установили с ключом Set-Cookie. Вместо этого у вас есть доступ к response.set_cookie, который позволит вам установить несколько файлов cookie с каждым вызовом set_cookie. Он также поставляется с некоторыми опциями, которые вы можете установить, которые вам нужно будет добавить к значению заголовка, который вы отправляете вручную с помощью set_header.

Вот пример, который я использовал, который позволил мне отправить повара ie:

response.set_cookie(
  :jwt,
  {
    value: 'this could be a token or whatever cookie value you wanted.',
    expires: 7.days.from_now,
    path: '/api/v1/auth',
    httponly: true
  }
)

Проверьте документацию для этого метода для других вариантов, потому что есть другие.

РЕДАКТИРОВАТЬ: У меня возникла проблема, когда повар ie отправляется в ответе, но не сохраняется (все еще). Он не обнаружился в хранилище повара ie, поэтому я изменил путь повара ie, отправляемого на /, и затем он обнаружился. Я удалил его, а затем изменил путь повара ie на /my/real/path, и он работал и хранился в хранилище cook ie. Go цифра.

...