重定向到登录页面

本文关键字:登录 重定向 | 更新日期: 2023-09-27 18:16:41

我有一个ASP MVC 5网站,我有几个控制器和视图,我怎么能把用户重定向到芳香登录视图,如果他没有通过验证之前的所有操作如果(user . identity)。身份验证)

重定向到登录页面

[Authorize]属性装饰控制器(如果您希望控制器中的所有操作都需要身份验证)或特定操作。您可以在您的web.config文件中指定用户被重定向到的登录url。

[Authorize]
public class UserController : Controller
{
    public ActionResult Index()
    {
        // Must be authorized
    }
    public ActionResult Users()
    {
        // Must be authorized
    }
}    
public class ProductController : Controller
{
    public ActionResult Index()
    {
        // Doesn't require authorization
    }
    [Authorize]
    public ActionResult Products()
    {
        // Must be authorized
    }
}

进一步阅读:

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute (v = vs.118) . aspx

对于这个任务,您可以使用[authorization]属性,您可以在class或Action级别实现它:

[Authorize] 
public class AccountController : Controller
{
    public AccountController () { . . . }
    public ActionResult Register() { . . . }
    public ActionResult Manage() { . . . }
    public ActionResult LogOff() { . . . }
. . .
} 

在上面的实例中,试图访问控制器中的任何操作方法都会将用户重定向到登录页面,之后将进一步重定向到最初请求的操作。

有关如何使用Autohorize属性的更多信息,请参阅MSDN文章,因为它扩展了示例和背景信息。

您可以在全局中使用事件。Asax对每个请求进行身份验证和授权。

Application_AuthenticateRequest:当安全模块已经确定当前用户的身份是有效的时触发。此时,已经验证了用户的凭据。

Application_AuthorizeRequest:当安全模块验证用户可以访问资源时触发。

那么,像这样(这还不完整)

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
            if (User.Identity.IsAuthenticated)
            {
                // you can re-direct them for example
            }       
    }

答案1:

你可以使用内置的[Authorize]属性在MVC..

 [Authorize] 
 public class YourController : Controller
 {
   public ActionResult YourAction()
   {
   }
 }

[Authorize]属性将检查用户是否经过身份验证,如果没有,那么它将自动重定向用户到登录页面

答案2:

或者您可以将您的自定义过滤器属性设置为:

 [AuthoriseUser]
 public class YourController : Controller
 {
   public ActionResult YourAction()
   {
   }
 }
public class AuthoriseUserAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
   // Check user is authenticated 
   // if user is not authenticated then do as :
     filterContext.Result = new RedirectToRouteResult(new
     RouteValueDictionary(new { controller = "Login", action = "Index" }));
}
}

答案3:

正如你在评论部分所说的,你不想在项目中的每个控制器上都写[Authorize]属性,那么下面的答案将帮助你:

public class YourController : Controller
{
  protected override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    //....Check user authentication here           
  }
}
public class MyController : YourController 
{
  public ActionResult Myaction()
  {
    // ...
  }
}

在上面的答案中,你所要做的就是让你的自定义基础控制器YourController,然后你可以把你的认证东西放在那里,然后你的web应用程序中的每个控制器将继承YourController而不是内置的基础Controller class