Перенаправление ASP.Net MVC 4 пользовательских авторизационных билетов

У меня проблема с перенаправлением на защищенное действие после установки билета проверки подлинности с помощью пользовательских форм. Вот что происходит:

  1. Я перехожу на сайт / домой / индекс
  2. Я автоматически перенаправлен на сайт / аккаунт / логин
  3. Я захожу с действительным пользователем / пароль
  4. Функция RedirecToUrl() пытается перенаправить меня обратно на сайт / дом / индекс, но я автоматически возвращаюсь обратно на сайт / аккаунт / логин
  5. Запрос аутентифицирован. Если я вручную перехожу на сайт / дом / индекс, я могу войти.

Кто-нибудь может пролить свет?

Мой Домашний Контроллер:

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

Мой аккаунтКонтроллер:

    [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 ответ

Решение

Тьфу!!!

 RedirectToUrl(returnUrl);

Должно быть

 return RedirectToUrl(returnUrl);
Другие вопросы по тегам