У меня настроена аутентификация на основе устройства и всевозможных правил, и в большинстве случаев она работает нормально. После входа в систему я установил current_user
и использую before_filter :authenticate_user!
Он работает в основном так, как ожидалось. Сессия прилипает даже когда я (вручную) захожу на другие сайты. Когда я возвращаюсь на свой сайт, я все еще вхожу в систему.
Я столкнулся с проблемами при попытке интеграции с поставщиком платежного шлюза.
Я отправляю сообщение формы в платежный шлюз, который выполняет свою функцию, а затем возвращает пользователя обратно на мой сайт, делая сообщение формы. Когда пользователь заходит на мой сайт, файлы cookie удаляются, и аутентификация теряется. Это означает, что current_user
теперь равно нулю.
Поток похож на
Order - > Login -> Confirm -> PaymentGateway -> CallBack(MySite)
| ^
| -- loggedin -- |
-----------------
Я провел дальнейшие исследования, используя проверку Firefox, и похоже, что файлы cookie установлены правильно. Например, после того, как я войду в систему, файл cookie будет _session_id:f58b52e6c168178711ba66aa3ac9d637
. Когда я вернусь из Платежного шлюза, файл cookie (в соответствии с firefox) будет _session_id:f58b52e6c168178711ba66aa3ac9d637
.. Это заставит меня поверить, что я останусь аутентифицированным. Однако, когда я печатаю current_user
, я получаю ноль.
Я также печатаю cookie в моих контроллерах, и это правильно:
In Подтвердить действие, когда я печатаю куки, получаю
Cookies #<ActionDispatch::Cookies::CookieJar:0x000001017c33d0, @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f58b52e6c168178711ba66aa3ac9d637"}>
На странице CallBack (MySite), если я печатаю куки, я получаю
Cookies #<ActionDispatch::Cookies::CookieJar:0x0000012b2225f0 @set_cookies={}, @delete_cookies={"remember_user_token"=>{:path=>"/"}}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f58b52e6c168178711ba66aa3ac9d637"}>
Что мне здесь не хватает. Почему разработчики намеренно выходят из меня? И есть ли способ остаться в системе?
Edit:
Я тоже пытался запомнить ... Это тоже не работает и чистит печенье.
In Подтвердить действие, когда я печатаю печенье, которое я получаю
Cookies #<ActionDispatch::Cookies::CookieJar:0x0000012b286fc8 @secret="4ccae7dce24d26dcf98220fb1e54cacf412efe1bf7dc003e1e5315abf50f5c4ep9g6i62b8a9d83cf3501564c7bd70ca7722db85a46015652c3d7fa4f156d4d0b", @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f63c3165f807b15e4a4e7de4a615d012", "remember_user_token"=>"BAhbB1sGaQYiIiQyYSQxMCRxVGJoVzEydjJtQ1Y4dndUeTdJMVp1--099213f62d5e317d9f83e758ac5995395e63ce7f"}>
Обратите внимание, что remember_user_token
установлен
На странице CallBack (MySite), если я печатаю куки, я получаю
#<ActionDispatch::Cookies::CookieJar:0x0000012b410100 @secret="4ccae7dce24d26dcf98220fb1e54cacf412efe1bf7dc003e1e5315abf50f5c4ep9g6i62b8a9d83cf3501564c7bd70ca7722db85a46015652c3d7fa4f156d4d0b", @set_cookies={}, @delete_cookies={"remember_user_token"=>{:path=>"/"}}, @host="localhost", @secure=true, @closed=false, @cookies={"_session_id"=>"f63c3165f807b15e4a4e7de4a615d012"}>
Таким образом, перед тем, как фильтр удалил cookie remember_user_token
, в проверке Firefox я могу подтвердить, что оба cookie отправлены на сайт и на рельсы.
В любом случае, devise выводит меня из системы, когда входящим действием является сообщение с внешнего сайта. Это ожидаемое поведение, могу ли я его изменить.