OpenID: неаутентифицированный POST становится GET после аутентификации

Я пробую OpenID Connect для своего приложения, но есть один рабочий процесс, который мне не удалось поддержать.

У меня есть кнопка «Добавить в корзину», которая отправляет POST запрос к HTTP-серверу. Если пользователь не аутентифицирован, он переходит к провайдеру идентификации для аутентификации. Однако после аутентификации пользователя поставщик удостоверений перенаправляет браузер на redirect_uri, используя GET, что означает, что мое приложение теряет контекст того, какой элемент пользователь хотел купить.

Единственная альтернатива, о которой я могу думать, - это скрыть кнопку «Добавить в корзину», пока пользователь не войдет в систему, но похоже, что это было бы важным ограничением OpenID. Есть другое решение?


person Luís Pureza    schedule 07.06.2018    source источник


Ответы (2)


Если пользователь не аутентифицирован, он переходит к провайдеру идентификации для аутентификации.

Это первое перенаправление, при котором вы теряете информацию POST.

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

person cweiske    schedule 18.06.2018
comment
Да, мысль о хранении информации POST в файле cookie пришла мне в голову после того, как я разместил вопрос. Я еще не тестировал его, но не понимаю, почему он не работает. Спасибо. - person Luís Pureza; 18.06.2018

Перенаправление всегда становится запросом GET, нет способа сохранить тело POST в случае перенаправления. Итак, у вас есть несколько вещей, которые вы могли бы сделать

  1. Показывать логин вместо "Добавить в корзину"

  2. URI перенаправления входа в систему должен иметь запрос на получение специального URL-адреса добавления в корзину с достаточной информацией. Таким образом, в основном дополнительная конечная точка GET вместо просто POST для добавления продукта в корзину

  3. Разрешить управлять тележкой без аутентификации, это то, что могло бы сделать большинство решений для электронной коммерции.

person Tarun Lalwani    schedule 13.06.2018