任何密码都适用于 SmartAdmin MVC

Any password is working with SmartAdmin MVC

我可以使用任何密码进行身份验证。电子邮件必须是有效的注册电子邮件,但密码无关紧要。其他一切正常。

关于从哪里开始解决这个问题有什么建议吗?我在网络搜索中没有发现任何类似的问题。

我的看法...

我在帐户控制器中的操作...

 [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(AccountLoginModel viewModel)
    {
        if (!ModelState.IsValid)
            return View(viewModel);

        var user = _manager.FindByEmail(viewModel.Email);

        if (user != null)
        {
            await SignInAsync(user, viewModel.RememberMe);

            string uid = user.Id;
            return RedirectToLocal(viewModel.ReturnUrl);
        }

        ModelState.AddModelError("", "Invalid username or password.");

        return View(viewModel);
    }

和 signinasync 方法...

private async Task SignInAsync(IdentityUser user, bool isPersistent)
    {
        // Clear any lingering authencation data
        FormsAuthentication.SignOut();

        // Create a claims based identity for the current user
        var identity = await _manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

        // Write the authentication cookie
        FormsAuthentication.SetAuthCookie(identity.Name, isPersistent);
    }

我确实创建了一个单独的 MVC web 项目来查看脚手架登录操作,这有很大的不同。 SmartAdmin 模板已足够自定义,因此很难在不知道我在做什么的情况下开始更改内容。任何方向表示赞赏。

如果您系统中的 usernameemail,您应该使用

var user = _manager.FindAsync(viewModel.Email, viewModel.Password);

然后在用户不为空的情况下登录。

如果 username 不是 email,您应该先获取 user 然后检查密码

var user = _manager.FindByEmail(viewModel.Email);
bool isPasswordCorrect = await _manager.CheckPasswordAsync(user, viewModel.Password);