Verificar dados do usuário Antes de cada ação

votos
1

Eu tenho um modelo de usuário que requer que o usuário altere sua senha a cada três meses. Eu preciso verificar alguma forma para ver se o usuário está conectado (que permitem navegadores anônimos em certas seções do site) e se sua senha expirou, forçá-los a entrar em um novo antes que eles podem fazer qualquer outra coisa.

A forma de força bruta de fazer isso seria adicionar um pouco de código para cada ação (exceto a ação ChangePassword em conta). Por exemplo:

var authenticatedUser = GetAuthenticatedUser();
if (authenticatedUser != null && authenticatedUser.IsPasswordExpired)
    return RedirectToAction(Account, ChangePassword);

Obviamente que é uma maneira horrível de resolver este problema, mas eu não tenho certeza do que o caminho certo para fazê-lo é. Alguma ideia? Tenho certeza que vamos ter que adicionar mais verificações de dados do usuário como esta no futuro, então eu realmente gostaria de encontrar uma boa solução para ele agora.

Publicado 26/08/2009 em 23:01
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

Eu faço autenticação personalizada na minha classe controlador de base (todos os meus controladores derivar dessa). Você pode substituir o método Controller.OnAuthorization protegida. Note-se que OnAuthorization é chamado após o método Controller.Initialize, por isso, se você colocar outra lógica personalizada no método de inicialização, basta lembrar que isso é chamado pela primeira vez.

    /// <summary>
    /// Called when authorization occurs.
    /// </summary>
    /// <param name="filterContext">Contains information about the current request and action.</param>
    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        // Do custom authentication here.
        Authenticate();

        base.OnAuthorization(filterContext);
    }
Respondeu 27/08/2009 em 03:30
fonte usuário

votos
0

Você pode escrever seu próprio HttpModule e validá-lo em cada solicitação uma vez. Você pode derivar de HttpModule e colá-la na seção de configuração httpModules web.config.

Respondeu 26/08/2009 em 23:04
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more