У меня есть страница входа в систему, которая вызывается через 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
});
};
При использовании 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);
}
}