我希望集中身份验证,开发人员可以自由担心安全性的实现。
我不想在每个请求中验证身份验证,例如
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();
}
}
谢谢
答案 0 :(得分:2)
您可以通过为应用程序内的所有控制器使用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
}
}
每次触发Controller的操作时,BaseController都会在Execute方法中验证凭据,而在OnActionExecuting中,如果凭据有效,则可以进行验证,而不是像重定向那样执行其他页面。
答案 1 :(得分:1)
查看您编写的代码,似乎您缺少属于asp.net mvc的Action Filters。有一个内置的名为Authorize
,基本上需要在调用控制器方法之前对请求进行身份验证,但创建自己的请求非常简单。
同样在asp.net mvc 3中,您可以定义全局过滤器,这些过滤器将成为控制器上调用的每个操作的一部分。您可以找到一些示例here