A sessão expira e o usuário não é mais válido
-
25-09-2019 - |
Pergunta
Eu cache informações sobre o usuário atualmente conectado na sessão. Esta informação é preguiçosa sempre que um CurrentUser
A propriedade na minha classe de aplicativo global é usada. Isso é feito chamando getUser () na minha implementação personalizada do associação, que carrega o usuário da sessão ou carrega o usuário do banco de dados e lança o objeto do usuário na sessão.
Como devo lidar com esse cenário?
- O usuário faz login.
- O administrador exclui o usuário (ou desativam ... o ponto é que eles não podem mais fazer login).
- A sessão do usuário expira.
- O usuário navega para uma página ou faz uma solicitação ou qualquer outra coisa.
Atualmente, se esse cenário ocorrer, o NullReferenceExceptions será lançado por todo o lugar, porque o ASP .NET Framework chama getUser () que não retorna nada porque não consegue encontrar o usuário no banco de dados (e não há nada na sessão porque expirou).
Solução
Se o seu aplicativo acha que um usuário está assinado, mas o usuário não pode ser encontrado, uma opção pode ser usar FormsAuthentication.SignOut()
Para fazer o Asp.net esquecer o usuário. Eles devem ser chutados de volta para a tela de login ou o modo anônimo.
Outras dicas
Jogue uma exceção do getUser () se você vai retornar nulo. Em seguida, você pode ter a armadilha do evento Application_error essa exceção específica e redirecionar para a sua página de login.