Как проверить учетные данные в MVC и перенаправить на неверную страницу входа - PullRequest
1 голос
/ 21 декабря 2010

Я хочу централизовать аутентификацию, чтобы разработчики могли беспокоиться о внедрении безопасности.

Я не хочу проверять аутентификацию при каждом запросе, например

public class HomeController : BaseController
{    
    public ActionResult Home()    
    {        
        if (Request.IsAuthenticated == true)        
        {            
            return RedirectToAction("Home", "Member");        
        }        
        return View();    
    }    

    public ActionResult Resources()    
    {        
        if (Request.IsAuthenticated == true)        
        {            
            return RedirectToAction("Resources", "Member");        
        }        
        return View();    
    }
}

Спасибо

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Вы можете централизовать проверку ваших учетных данных, используя BaseController для всех ваших контроллеров внутри вашего приложения

public class BaseSupplierFlyersController : BaseController
  {
    //
    // GET: /SupplierFlyers/
    public ActionResult Index(string culture)
    {
      //Some action logic here
      return View("Index");
    }
}

В вашем BaseControler

public class BaseController : Controller
  {
    private bool IsLoged = false;
    public BaseController()
      : base()
    {

    }

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      if (!IsLoged)
      {
        //Redirection du bad login.
        //Affect the Result to cancelled previous Action execution
        filterContext.Result = new RedirectResult(string.Concat("~/", ControllerConstants.Error,"/", ActionConstants.BadLogin));
      }
      base.OnActionExecuting(filterContext);
    }

    protected override void Execute(RequestContext requestContext)
    {
      //Validate Credential
      ValidateCredential(requestContext);
      //Traitement standard
      base.Execute(requestContext);
    }

    private void ValidateCredential(RequestContext requestContext)
    {
      //Logic to validate credential here
      IsLoged = true; //or false
    }
  }

Каждый раз, когда запускается действие из контроллераBaseController проверит учетные данные в методе Execute, а в OnActionExecuting вы можете проверить, действительны ли учетные данные, и затем выполнить действие, подобное Перенаправлению на другую страницу.

1 голос
/ 21 декабря 2010

Глядя на код, который вы написали, кажется, что вам не хватает Фильтров действий, которые являются частью asp.net mvc.Существует один встроенный с именем Authorize, который в основном требует проверки подлинности запроса перед вызовом метода контроллера, но создать свой собственный очень просто.

Также в asp.net mvc 3 вы можете определить глобальные фильтры, которые будут частью каждого действия, выполняемого на ваших контроллерах.Вы можете найти образцы здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...