Asp.NET MVC 5通过电子邮件和密码验证用户

时间:2017-02-17 15:17:59

标签: asp.net authentication

我正在使用我们购买的Bootstrap 3主题附带的Asp.NET MVC 5项目,并且在其登录方法中,他们只是根据他的电子邮件查找用户,密码未经过验证。登录方法如下:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(AccountLoginModel viewModel)
    {
        // Ensure we have a valid viewModel to work with
        if (!ModelState.IsValid)
            return View(viewModel);

        // Verify if a user exists with the provided identity information
        var user = await _manager.FindByEmailAsync(viewModel.Email);
        var hashPass = new PasswordHasher().HashPassword(viewModel.Password); // this is a line I added which gerenates a different hash everytime
        // If a user was found
        if (user != null)
        {
            // Then create an identity for it and sign it in
            await SignInAsync(user, viewModel.RememberMe);

            // If the user came from a specific page, redirect back to it
            return RedirectToLocal(viewModel.ReturnUrl);
        }

        // No existing user was found that matched the given criteria
        ModelState.AddModelError("", "Invalid username or password.");

        // If we got this far, something failed, redisplay form
        return View(viewModel);
    }

我尝试插入密码验证的行是if (user != null)。我尝试使用_manager.Find(email,password),但它不起作用。

如何通过电子邮件登录用户并验证密码?

2 个答案:

答案 0 :(得分:1)

这是因为您在尝试查找用户之前正在哈希密码。

待办事项

var user = _manager.Find(viewModel.Email, viewModel.Password);
// If a user was found
if (user != null)
{
    //...other code removed for brevity.

这是执行此操作的标准方法。

答案 1 :(得分:0)

-------试试这段代码------

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
         case SignInStatus.Success:
            return View("SuccessView");             
         case SignInStatus.Failure:
            return View("LoginView");
        }