RedirectToLocal не работает

0

У меня есть страница входа в систему, которая вызывается через View, который также использует Angular.

Как только он попадает в команду "RedirecToLocal". Я прохожу через нее, и я вижу, что он попал в мой домашний контроллер и отлично отображает представление индекса. Но когда дело доходит до моего браузера, фактически меняющего страницы на индекс, он просто не изменится и остается сосать на экране входа в систему. Я не понимаю, почему. Я собираюсь сходить сюда

Контроллер счета

[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
    [HttpPost]
    [AllowAnonymous]
    public ActionResult Login(LoginFormModel form, string selectedShow)
    {
        if (ModelState.IsValid && WebSecurity.Login(form.userName, form.password))
        {
            ...code here...
        }
        return RedirectToLocal("/");  //HITS HERE SUCCESSFULLY

Домашний контроллер

[Authorize]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();  //HITS HERE SUCCESSFULLY
    }
}

Редактировать:

HTML и угловой

    <button id="loginBtn" ng-click="login()" ng-class="{ 'disabled': isLoading }" class="btn btn-large btn-primary btn-block">
  <span>{{buttonText}}</span>
  </button>

Угловой LoginController:

AccountFactory.login($rootScope.formData);

Учетная запись

AccountFactory.login = function (formData) {
    return $http({
        method: 'POST',
        url: '/Account/Login',
        data: formData
    });
};
Теги:
asp.net-mvc
asp.net-mvc-4

1 ответ

2
Лучший ответ

При использовании Ajax через $ http браузер не принимает редирект, выданный сервером для принятия мер безопасности.

При использовании ajax обрабатывайте успешное возвращение, указывающее авторизацию и перенаправление через маршрутизацию клиента (вашего предпочтительного вкуса).

AccountFactory.login($rootScope.formData).then(function (data) {
    $location.path("/");
});

Поскольку .then() считается успешным обратного вызова, приемлемый шаблон будет вернуть успешный 200 код состояния с вашего API для успеха и 40x для неудачной попытки авторизации.

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginFormModel form, string selectedShow)
{
    if (ModelState.IsValid && WebSecurity.Login(form.userName, form.password))
    {
        ...code here...
        return new HttpStatusCodeResult(200);
    }
    else 
    {
        return new HttpStatusCodeResult(403);
    } 
}
  • 0
    Кроме того, когда вы указываете «обработать успешный возврат с указанием авторизации и перенаправления через« клиентскую маршрутизацию »вашего предпочтительного варианта» ... вы имеете в виду, что я могу перенаправить только с помощью UI-Router или NGRoute? Это не будет работать на серверной части?
  • 0
    о, неважно, $ location.path ("/") тоже будет работать?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню