Estou criando um aplicativo de página única e tendo um problema com os tokens anti-falsificação.
Sei por que o problema acontece, simplesmente não sei como corrigi-lo.
Recebo o erro quando acontece o seguinte:
- O usuário não conectado carrega uma caixa de diálogo (com um token antifalsificação gerado)
- Usuário fecha a caixa de diálogo
- Usuário faz login
- Usuário abre a mesma caixa de diálogo
- Usuário envia formulário na caixa de diálogo
O token anti-falsificação destina-se ao usuário "", mas o usuário atual é "nome de usuário"
A razão pela qual isso acontece é que meu aplicativo é 100% de página única e, quando um usuário efetua login com êxito em uma postagem do ajax /Account/JsonLogin
, simplesmente troco as visualizações atuais com as "visualizações autenticadas" retornadas do servidor, mas não recarrego o página.
Sei que esse é o motivo, porque se eu simplesmente recarregar a página entre as etapas 3 e 4, não haverá erro.
Portanto, parece que @Html.AntiForgeryToken()
no formulário carregado ainda retorna um token para o usuário antigo até que a página seja recarregada.
Como posso alterar @Html.AntiForgeryToken()
para retornar um token para o novo usuário autenticado?
Eu injeto um novo GenericalPrincipal
com um costume IIdentity
de cada Application_AuthenticateRequest
vez que @Html.AntiForgeryToken()
é chamado HttpContext.Current.User.Identity
, na verdade, minha identidade personalizada com IsAuthenticated
propriedade definida como true e ainda @Html.AntiForgeryToken
assim parece render um token para o usuário antigo, a menos que eu recarregue a página.