c# MVC利用AuthorizeAttribute驗證用戶是否登錄


現在多數網站必須驗證用戶登陸並利用Session或者Cookie存儲用戶登陸后才能進行操作,

如果存儲過期或者沒用登陸則自動返回到登陸界面MVC自帶AuthorizeAttribute屬性進行驗證。

1、 用戶登陸

輸入用戶登錄名和密碼驗證成功后,利用Session存儲登陸用戶信息

 

HttpContext.Current.Session["LoginUser"] = userDTO;//userDTO登陸用戶實體類

 

2、創建AccountManagerment類下GetCurrentUser()方法,獲取Session中存儲的用戶信息,返回實體類UserDTO

    public class AccountManagerment
    {
        /// <summary>
        /// 獲取當前用戶信息
        /// </summary>
        /// <returns></returns>
        public static UserDTO GetCurrentUser()
        {
            var session = HttpContext.Current.Session["LoginUser"];
            if (session == null)
                return new UserDTO();
            return session as UserDTO;
        }
    }

3、創建AccountAuthorizeAttribute類,繼承AuthorizeAttribute,並重寫OnAuthorization方法

  /// <summary>
    /// 驗證用戶是否登錄
    /// </summary>
    public class AccountAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext authorizationContext)
        {
            var httpContext = authorizationContext.HttpContext;
            var request = httpContext.Request;

            ActionResult actionResult = null;
            string message = string.Empty;
            var user = AccountManagerment.GetCurrentUser();
            if (user.rolepermissionDTO == null)
            {
                String url = request.RawUrl;
                UrlHelper urlHelper = new UrlHelper(request.RequestContext);
                //利用Action 指定的操作名稱、控制器名稱和路由值生成操作方法的完全限定 URL。
                string returnUrl = urlHelper.Action("Login", "Home", new { returnUrl = "", message = message });
                actionResult = new RedirectResult(returnUrl);
            }

            authorizationContext.Result = actionResult;
        }
}

4、將屬性[AccountAuthorize]置於整個Controller之上當用戶有操作時,進入控制器前都會先驗證用戶是否登錄,或者存儲用戶信息過期從而返回登錄界面。

 

       [AccountAuthorize]
        public ActionResult Index(string title, string dp, string end, int id = 1)
        {
            return view();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM