У нас проблема с приложением asp. net core 3.1 MVC. Приложение использует встроенную функцию идентификации asp. net. Приложение хорошо работает для существующих пользователей. Если вы выберете любой маршрут [Authorized]
, вы будете перенаправлены на страницу входа, как и ожидалось.
Однако, вместо того, чтобы регистрироваться в нашем приложении, для новых пользователей мы подключаем их через Stripe Checkout. После успешной оплаты Stripe перенаправляет на указанный маршрут c в нашем приложении /conversion/success/{sessionid}
, где sessionid - это сеанс Stripe. Это действие помечено как [AllowAnonymous]
.
Затем мы извлекаем необходимые данные о клиенте из Stripe, создаем пользователя в нашем репозитории через UserManager<T>
. Затем мы вызываем SignInManager<T>.SignInAsync()
, чтобы войти в систему нового пользователя, прежде чем перенаправить нового пользователя на домашнюю страницу [Authorized]
.
Этот процесс отлично работает при локальном запуске на наших тестовых машинах. Кроме того, при запуске на нашем производственном сервере (Azure App Service) он также отлично работает, когда мы запускаем маршрут вручную через браузер.
Однако, когда мы фактически запускаем процесс через Stripe, завершаем платеж и пусть Stripe перенаправит клиента, мы получим странное поведение.
Маршрут преобразования достигнут, запись пользователя создана, процесс входа завершается, но после перенаправления на домашнюю страницу промежуточное ПО аутентификации берет на себя, говорит, что это не аутентифицирован и перенаправляется на страницу входа.
Чтобы еще больше усложнить ситуацию, если вы затем просто введете маршрут домашней страницы в браузере, пользователь фактически войдет в систему точно так, как ожидалось, и приложение работает отлично .
Использование Fiddler для перехвата вызовов и просмотра заголовков, et c. мы не можем понять, почему при поступлении из Stripe будет другое поведение, чем при прямом вводе. Мы даже пытались перенаправить с другого веб-сайта на наш процесс регистрации, и это тоже работает должным образом.
Есть идеи, почему мы наблюдаем такое поведение?
---- Обновление ---
Если вместо перенаправления на домашнюю страницу в конце процесса адаптации мы просто покажем простое представление с якорной ссылкой на домашнюю страницу, пользователь сможет go перейти на домашнюю страницу, как и ожидалось.