await SignInManager.PasswordSignInAsync() 总是导致我的 ASP.NET MVC 项目失败

问题描述 投票:0回答:5

我目前正在实现登录 ASP.NET MVC 项目的功能。我正在尝试尽可能多地使用提供的方法。

目前,我在数据库中设置了一个名为 User 的表,其中存储所有用户名、密码和有关用户的其他详细信息。

我的登录视图模型:

public class LoginViewModel
{
    public User User { get; set; }
}

AccountController(主要是默认的,我只更改了PasswordSignInAsync方法的变量)

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        return View(model);
    }
    // To enable password failures to trigger account lockout, change to shouldLockout: true
    var result = await SignInManager.PasswordSignInAsync(model.User.Username, model.User.Password, false , shouldLockout: false);

为什么这一行总是返回失败?

这是我第一次尝试添加登录功能,因此我们将不胜感激。 :)

c# asp.net asp.net-mvc asp.net-mvc-4
5个回答
29
投票

如果用户名!=电子邮件:

它对我有用:

注释掉:

//var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);

并添加

ApplicationUser signedUser = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false);

2
投票

根据

User
检索
model.Email
并将整个 User 对象作为第一个参数传递。

var user = dbContext.ApplicationUser.GetFirstOrDefault(u => u.Email == model.Email);

上面的查询返回用户数据。检查用户是否为空。验证检索到的用户数据并将其作为参数传递给

PasswordSignInAsync
。有两种不同的方法,参数类型不同。

PasswordSignInAsync(String, String, Boolean, Boolean)

尝试以异步操作方式登录指定的用户名和密码组合。

PasswordSignInAsync(TUser, String, Boolean, Boolean)

尝试以异步操作方式登录指定的用户和密码组合。

PasswordSignInAsync(TUser, String, Boolean, Boolean)
执行与上面类似的操作并成功结果。以下是检索成功结果的查询。

var result = await _signInManager.PasswordSignInAsync(user, model.Password, model.RememberMe, lockoutOnFailure: false);

1
投票

添加

app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

前往

public void ConfigureAuth(IAppBuilder app)
中的方法
App_Start\Startup.Auth.cs


1
投票
  1. 检查是否成功。ToString() is == NotAllowed
  2. 如果是这种情况,请检查 Startup.cs 中的这一行: services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true)
  3. 如果是这种情况,您尝试使用未经确认的电子邮件登录,无论用户名和密码是否正确,您都会被拒绝。
  4. 确认电子邮件或将 RequireConfirmedAccount 设置为 false。

0
投票

公共异步任务登录(LoginViewModel模型) { 尝试 { SignInResult 结果 = wait _signInManager.PasswordSignInAsync(model.UserName, model.Password, true, lockoutOnFailure: true); if (结果.成功) { var user = wait _userManager.FindByNameAsync(model.UserName);

        if (user != null)
        {
            var userTbResponse = _dbcontext.UserTb.FirstOrDefault(x => x.AspUserId == user.Id);

            if (userTbResponse != null)
            {
                SessionManager.Email = user.Email;
                SessionManager.UserId = userTbResponse.UserId;
                return true;
            }
        }
    }
    return false;
}
catch (Exception ex)
{
    _logger.LogError("Error occurred during login: " + ex.Message, ex);
    throw;
}

} 在此代码中结果显示不允许

© www.soinside.com 2019 - 2024. All rights reserved.