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