在mvc中输入错误密码后重定向不正确

时间:2017-10-22 12:18:25

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

在MVC上,我添加了searchTypeCtrl.valueChanges.subscribe(value => { value === 0 ? this.numberCtrl.setValidators([..conditional validators..]) : this.numberCtrl.setValidators([..conditional validators..]) this.numberCtrl.updateValueAndValidity(); }) Admincontroller,以检查它是否未重定向到[Authorize]。 当您想要输入loginpage时,它会重定向到Adminpage。如果输入正确的信息如果输入错误,请将其发送到管理页面然后输入正确的密码重定向到{{1} } 我不知道问题是什么

  

控制器登录

Loginpage
  

查看登录

HomePage
  

的Web.Config

       // GET: /Account/Login
    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

    //
    // POST: /Account/Login

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change to shouldLockout: true
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
        }
    }

    //
  

管理控制器

        @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {.....

1 个答案:

答案 0 :(得分:0)

您不会存储重定向应该在哪里的信息。 让我解释一下。

  1. 您浏览到管理员
  2. 您将在登录页面上重定向 现在,您的ReturnUrl变量指向管理员控制器。
  3. 身份验证过程

    • 如果进程失败。您的新ReturnUrl变量设置为null。这就是您在主页上重定向的原因。

    • 如果流程成功,ReturnUrl变量将不会重置,您将被重定向到管理页面。

  4. 对此的解决方案是以其他方式存储您的ReturnUrl变量,或确保它与凭据一起传递。

    一个简单的解决方案是编辑LoginController而不是这段代码

    if (!ModelState.IsValid)
    {
       return View(model);
    }
    ...
    switch (result)
    {
    ...
    case SignInStatus.Failure:
       default:
       ModelState.AddModelError("", "Invalid login attempt.");
       return View(model);
    }
    

    使用此代码:

    if (!ModelState.IsValid)
    {
       ViewBag.ReturnUrl = returnUrl;
       return View(model);
    }
    
    ...
    switch (result)
    {
    ...
       case SignInStatus.Failure:
       default:
       ViewBag.ReturnUrl = returnUrl;
       ModelState.AddModelError("", "Invalid login attempt.");
       return View(model);
    }
    

    编辑:更新代码

    也更新了switch语句。