Я создаю одностраничное приложение и испытываю проблему с токенами подделки.
Я знаю, почему проблема возникает, я просто не знаю, как ее исправить.
Я получаю ошибку, когда происходит следующее:
- Пользователь без входа загружает диалоговое окно (с генерируемым токеном анти-подделки)
- Пользователь закрывает диалог
- Пользователь регистрируется в
- Пользователь открывает тот же диалог
- Пользователь отправляет форму в диалоговом окне
токен анти-подделки предназначен для пользователя ", но текущий пользователь" Имя пользователя"
Причина этого в том, что мое приложение на 100% одностраничное, и когда пользователь успешно входит в систему через пост ajax до /Account/JsonLogin
, я просто отключу текущие представления с помощью "аутентифицированных представлений", возвращенных из сервер, но не перезагружать страницу.
Я знаю, что это причина, потому что, если я просто перезагружу страницу между шагами 3 и 4, ошибки не будет.
Итак, кажется, что @Html.AntiForgeryToken()
в загруженной форме по-прежнему возвращает токен для старого пользователя, пока страница не будет перезагружена.
Как изменить @Html.AntiForgeryToken()
, чтобы вернуть токен для нового, прошедшего проверку подлинности пользователя?
Я добавляю новый GenericalPrincipal
с пользовательским IIdentity
на каждом Application_AuthenticateRequest
, поэтому к моменту @Html.AntiForgeryToken()
получает вызов HttpContext.Current.User.Identity
, на самом деле мой пользовательский Identity с свойством IsAuthenticated
, установленным в true и все же @Html.AntiForgeryToken
по-прежнему представляется маркером для старого пользователя, если я не перезаряжаю страницу.