LINUX.ORG.RU

При неясных условиях пропадает авторизация

 , ,


0

1

Ух, попробую описать суть проблемы. Есть веб-сервис. Он постепенно переписывается на React+Redux, но большая его часть, пока что, на PHP+Yii.

Те части приложения, которые написаны на React'e обращаются к контроллерам, которые реализуют API для их работы.

Вылезла такая проблема - при некоторых неясных условиях серверная часть не понимает, что юзер залогинен. Проблема проявляется только на локалхосте, на продакшене все нормально работает.

Интересный момент - если скопировать ссылку, по которой реакт-приложение пытается получить данные с сервера и просто открыть в браузере - все работает, пользователь детектится как залогиненный.

Я заподозрил проблему с куками, и заметил, мягко говорю, странное поведение. На проде в заголовках есть раздел cookie, на локалке - нет. При чем, что важно, нет его и в тех запросах, что не работают (т.к. юзер, якобы, не залогинен) и в тех запросах, которые работают. WTF?

В реакте для запросов использую fetch, c такими параметрами:

const FETCH_PARAMS = {
  headers: { "Content-Type": "application/json" },
  mode: "cors",
  credentials: "include"
};

Для CORS сервер шлет такие заголовки:

header("Access-Control-Allow-Origin: {$http_origin}");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type, X-Requested-With");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");

Не знаю куда дальше смотреть. Поделитесь советом каким нибудь.

Deleted

Последнее исправление: Bizun (всего исправлений: 1)

UPD

На счет кук - судя по всему, они отрпвляются, но по какой-то причине не отображаются в Networks. В chrome://net-internals/#events нашел вот такое:

HTTP_TRANSACTION_SEND_REQUEST_HEADERS
                        --> GET /reactComments/dialogs HTTP/1.1
                            Host: pro.dune.com
                            Connection: keep-alive
                            Pragma: no-cache
                            Cache-Control: no-cache
                            Origin: http://localhost:8081
                            User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
                            Content-Type: application/json
                            Accept: */*
                            Referer: http://localhost:8081/
                            Accept-Encoding: gzip, deflate
                            Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
                            Cookie: jv_enter_ts_7H5kb3pFRG=1510649965206; jv_refer_7H5kb3pFRG=http%3A%2F%2Fpro.dune.com%2FbloggersCheck%2Findex; jv_utm_7H5kb3pFRG=; jv_close_time_7H5kb3pFRG=1510651950172; jv_pages_count_7H5kb3pFRG=1541; _ym_uid=1512733138745483495; fileDownload=true; _ym_d=1531820498; lovec=23; PHPSESSID=vnvbcvuf9elqg91h99ghu449n5; f1f1f55bbc7f8605e7173d648339c768=b10211dbbef4a14f741e884445352826031aee8fa%3A4%3A%7Bi%3A0%3Bs%3A1%3A%221%22%3Bi%3A1%3Bs%3A5%3A%22Guest%22%3Bi%3A2%3Bi%3A2592000%3Bi%3A3%3Ba%3A0%3A%7B%7D%7D; authorized=1

Deleted
()

Проверь что в пути к кукам просто «/». Ну или опционально - что хост прописан (не помню как лучше на локалхосте).

А то может быть какая-нибудь фигня, типа ставишь на localhost а заходишь на 127.0.0.1

Vit ★★★★★
()
Ответ на: комментарий от Vit

Проверь что в пути к кукам просто «/».

Так и есть, просто /.

Ну или опционально - что хост прописан (не помню как лучше на локалхосте).

Тут тоже все хорошо.

Deleted
()

И бекенд и фронт в дев режиме оба на локалхосте? Смотри запросы в хроме, смотри в фаерфоксе, мониторь стейт реакта, больше логгируй.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Чувак, весь день только этим и занимался. Не смог разобраться.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.