我有一个登录页面,可以通过使用Angular的View调用。
一旦它点击“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>
Angular LoginController:
AccountFactory.login($rootScope.formData);
帐户工厂
AccountFactory.login = function (formData) {
return $http({
method: 'POST',
url: '/Account/Login',
data: formData
});
};
答案 0 :(得分:2)
当通过$ http使用Ajax时,浏览器将不接受服务器发出的重定向以进行安全措施。
使用ajax时,处理成功返回,指示授权并通过客户端路由重定向(您喜欢的风格)。
AccountFactory.login($rootScope.formData).then(function (data) {
$location.path("/");
});
由于.then()
被视为成功回调,因此可接受的模式是从您的API返回成功的200
状态代码以获得成功,并40x
用于不成功的授权尝试。< / p>
[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);
}
}