ASP.Net MVC 4自定义授权故障单重定向问题

时间:2012-11-07 19:00:34

标签: asp.net-mvc forms-authentication formsauthenticationticket

我遇到了在设置自定义表单身份验证票证后重定向到安全操作的问题。这是正在发生的事情:

  1. 我导航到Site / Home / Index
  2. 我会自动重定向到网站/帐户/登录
  3. 我使用有效的用户/通行证
  4. 登录
  5. RedirecToUrl()函数尝试将我重定向回Site / Home / Index,但我会自动返回Site / Account / Login
  6. 请求已通过身份验证。如果我手动导航到Site / Home / Index,我就被允许进入。
  7. 任何人都可以放弃任何光线吗?

    我的HomeController:

    [Authorize]
    public ActionResult Index()
    {
        return View();
    }
    

    我的AccountController:

        [HttpGet]
        [AllowAnonymous]
        public ActionResult Login(string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            return View();
        }
    
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                bool bLogin = MyAuthentication.Login(model.UserName, model.Password);
    
                if (bLogin)
                {
                    Response.Cookies.Add(MyAuthentication.GetAuthenticationCookie(model.UserName.ToLower(), model.RememberMe));
                    RedirectToUrl(returnUrl);
                }
                else
                    ModelState.AddModelError("", "That is not a valid Username/Password combination");
    
            }
    
            return View(model);
        }
    
        private ActionResult RedirectToUrl(string returnUrl)
        {
            if (Url.IsLocalUrl(returnUrl))
                return Redirect(returnUrl);
            else
                return RedirectToAction("Index", "Home");
        }
    

    以下是我创建自定义故障单的方法(仅添加userdata):

        public static HttpCookie GetAuthenticationCookie(string UserName, bool persistLogin)
        {
            var userData = null; // Code removed for brevity
    
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                     1,
                     UserName,
                     DateTime.Now,
                     DateTime.Now.AddMinutes(20),
                     persistLogin,
                     userData);
    
            string encTicket = FormsAuthentication.Encrypt(authTicket);
            return new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
        }
    

1 个答案:

答案 0 :(得分:3)

哎!

 RedirectToUrl(returnUrl);

需要

 return RedirectToUrl(returnUrl);