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