Jac*_*rst 26 c# asp.net asp.net-identity
我对MVC5的标准ASP身份提供程序有疑问.我一登录方法:
await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)
不断回来失败.所以我开始调试,使用:
UserManager.FindByEmail(model.Email);
Run Code Online (Sandbox Code Playgroud)
这将为我的用户尝试登录返回有效的UserID.然后我使用:
SignInManager.UserManager.CheckPassword(UserIDObtainedFromFind, model.Password);
Run Code Online (Sandbox Code Playgroud)
这返回true,这意味着我提供的密码是有效的....

关于我如何跟踪,调试SignInManager.PasswordSignInAsync方法以查看它失败的地方的任何想法?
Hao*_*ung 78
SignInManager.PasswordSignIn使用用户名,您应该仔细检查用户名是否与您传入的电子邮件相同.
小智 26
如果username != email:
ApplicationUser signedUser = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)
小智 11
在我的例子中,相同的探针验证电子邮件和密码,电子邮件与我的用户相同。
var userDO = _userManager.FindByEmailAsync(Input.Email).Result;
var validatr = _userManager.CheckPasswordAsync(userDO, Input.Password);
Run Code Online (Sandbox Code Playgroud)
电子邮件=用户名
真实结果
然后查数据库发现没起作用的用户验证字段是false
那么验证参数必须在启动时进行验证。位于Startup.cs内
public void ConfigureServices(ServiceCollection services)
{
//......
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = false)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
//......
}
Run Code Online (Sandbox Code Playgroud)
上述属性设置 获取或设置一个标志,指示是否需要已确认的 IUserConfirmation 帐户才能登录
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
Run Code Online (Sandbox Code Playgroud)
再见!