在Asp中使用Javascript访问受保护的页面,NET MVC返回未授权

时间:2015-12-18 12:33:28

标签: javascript asp.net asp.net-mvc-5

我正在尝试使用javascript将用户重定向到控制器操作,并且我一直在获取未经授权的响应

Java脚本代码如下

 var instance = axios.create({
        baseURL: this.baseUrl,  headers: {'X-Requested-With': 'XMLHttpRequest'},
    });
    instance.post('Account/Login', d)
        .then(function(resonse){
            console.log(resonse);
            window.location = this.baseUrl + 'live';
        }).catch(function(response){
        console.log(response);
        window.location.href = this.baseUrl +'Account/Login';
    }.bind(this));

我的登录例程实现如下

        if (HttpContext.Request.IsAjaxRequest())
        {
            if (!ModelState.IsValid)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest,
                    "A valid Email address and password is required");
            }

            var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
            switch (result)
            {
                case SignInStatus.Success:
                {
                    return RedirectToAction("Index", "Live");
                }  
                case SignInStatus.LockedOut:
                    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized, "Account is disabled at the moment");
                case SignInStatus.RequiresVerification:
                    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized, "Email address requires confirmation");
                case SignInStatus.Failure:
                default:
                    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized, "Invalid Log in Attempt");
            }
        }

我尝试重定向的操作方法如下

[Authorize]
public class LiveController : Controller
{

    [Route("live")]
    public ActionResult Index()
    {
        return View();
    }

}

现在我的问题是,当身份验证成功并且我尝试重定向到/ live url时,即使身份验证成功,我仍然会收到来自服务器的未经授权的响应。

1 个答案:

答案 0 :(得分:0)

确保正在设置.ASPXAUTH(或者如果您自定义名称,则为其调用的任何内容)cookie。这真的是唯一能让你在认证后看起来没有经过验证的东西。 AJAX请求支持服务器设置cookie,但可能会有一些奇怪的事情发生。

那就是说,如果您要做的就是立即重定向,那么通过AJAX登录真的没有意义。您可以轻松地使用returnUrl执行标准帖子并获得相同的效果,并且这肯定会在100%的时间内起作用。