繁体   English   中英

重定向到登录页面

[英]Redirect To the log in page

我有一个ASP MVC 5网站,我有多个控制器和视图,如果未通过if(User.Identity.Is Authenticated)的所有操作,如果未通过身份验证,如何将用户芳香地重定向到“登录”视图

使用[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

对于此任务,您可以使用[Authorize]属性,该属性可以在“类”或“操作”级别实现:

[Authorize] 
public class AccountController : Controller
{
    public AccountController () { . . . }

    public ActionResult Register() { . . . }

    public ActionResult Manage() { . . . }

    public ActionResult LogOff() { . . . }
. . .
} 

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

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

答案1:

您可以在MVC中使用内置的[Authorize]属性。

 [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

您可以使用global.asax中的事件对每个请求进行身份验证和授权。

Application_AuthenticateRequest :当安全模块已将当前用户的身份确定为有效时触发。 至此,用户的凭证已经通过验证。

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

因此,这样的事情(虽然还不完整)

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
            if (User.Identity.IsAuthenticated)
            {

                // you can re-direct them for example
            }       
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM