我目前正在实现登录 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);
为什么这一行总是返回失败?
这是我第一次尝试添加登录功能,因此我们将不胜感激。 :)
如果用户名!=电子邮件:
注释掉:
//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);
根据
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);
添加
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
前往
public void ConfigureAuth(IAppBuilder app)
中的方法
App_Start\Startup.Auth.cs
公共异步任务登录(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;
}
} 在此代码中结果显示不允许