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