Публикация в форме с сообщением о том, что пользователь не вошел в систему, существует файл cookie сеанса - PullRequest
0 голосов
/ 20 мая 2011

У меня есть форма, которая при отправке вызывает запрос jquery .ajax, например:

$.ajax({
 type:"POST",
 url: "/posts/" + id + "/add_comment",
 ..
 ..
});

У этого веб-сайта есть субдомены, и файл cookie сеанса после входа в систему выглядит следующим образом:

name: __webt_session
value: ...
host: testsubdomain.lvh.me
path: /
Secure: No
Expires: At end of session

Теперь, когда я отправляю комментарий, он не сохраняет комментарий, он скорее перенаправляет на страницу входа (html для страницы входа в систему, он не 'фактически перенаправляет, потому что это был вызов ajax засцены).

Должен ли мой URL для действия формы включать субдомен?

Кстати, почему он говорит «безопасный: НЕТ»

ОБНОВЛЕНИЕ

Я установил в URL-адресе записи полный URL с субдоменом, и он все еще перенаправляет на страницу входа. Почему он не забирает cookie?

Когда я нахожусь на странице, на которой я публикую форму, я вхожу в систему очень хорошо.URL содержит субдомен в нем.Должно быть, когда я публикую на странице, по той или иной причине, он думает, что я не вошел в систему и перенаправляет меня (вы должны войти в систему, чтобы оставить комментарий).Очень растерян, почему он не забирает печенье.

Идеи?

1 Ответ

1 голос
/ 20 мая 2011

Убедитесь, что ваше сообщение имеет рельсы authenticity_token, если действие вашего контроллера имеет protect_from_forgery

В rails 3.0.x (x> 3), если verify_authenticity_token завершится неудачно, он выйдет из системы, поэтому ваша аутентификация не удастся.

UPDATE

Чтобы сделать это в своем посте javascript, вам нужно добавить параметр поста с именем authenticity_token. Значение этого параметра можно определить двумя способами:

1) В вашем контроллере вызовите form_authenticity_token и передайте это значение в javascript.

2) Добавьте в свой макет эту строку

<%= csrf_meta_tag %>

Это добавит следующее к заголовку вашего документа

<meta name="csrf-param" content="authenticity_token"/> 
<meta name="csrf-token" content="Sm8z1XLTzI5HCy7+MIB+yFXiGUdS1byUHI8brHknirY="/>

Вы можете получить значение поста с помощью небольшого javascript, например:

document.getElementsByName('csrf-token')[0].content

В этой версии вы можете быть очень корректным и использовать значение

document.getElementsByName('csrf-param')[0].content

для определения имени параметра сообщения

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