我被要求提供通过用户界面创建用户而不需要密码的能力,我正试图使用ASP.NET身份来实现这一点。
我可以使用UserManager
的Create
方法成功创建一个没有密码的用户:
if (vm.ShouldHavePassword)
{
userManager.Create(userToInsert, vm.Password);
}
else
{
userManager.Create(userToInsert);
}
字符串
在调用Create
方法后,测试用户成功保存到AspNetUsers
表中。当我不提供密码时,AspNetUsers
表中的PasswordHash
列被设置为NULL
。
我的问题是,我无法作为没有密码的测试用户登录。下面是我们用来验证用户凭据的方法调用:
result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
型
我多次尝试以具有NULL
PasswordHash
的测试用户身份登录。为此,我没有在登录表单中提供密码。因此,NULL
密码被传递到PasswordSignInAsync
方法中。此方法调用的返回值始终为SignInStatus.Failure
。
使用ASP.NET标识,当凭据包含NULL
密码,而数据库中的用户包含NULL
PasswordHash
密码时,如何配置代码以正确地对用户凭据进行身份验证?
4条答案
按热度按时间pieyvz9o1#
好的,你需要做的是使用你的数据库上下文找到用户(
AspNetUsers
用户)。在你有了用户之后,你可以检查他们的PasswordHash
是否为空。如果是,那么就使用SignInManager.SignIn
登录。如果不是,使用SignInManager.PasswordSignIn
。联系我们
字符串
希望对你有帮助。
wpcxdonn2#
是的,你可以。ASP.NET标识框架是完全可定制的。只需像这样重写
PasswordValidator.ValidateAsync
和PasswordHasher.VerifyHashedPassword
方法:字符串
把它们设置成这样:
型
rfbsl7qr3#
我经常需要创建系统的第一个管理员用户(通常是我自己),这样我就可以为客户创建更多的帐户。
UserManager<AppUser>.CreateAsync(AppUser user)
是正确的调用,因为您不想将密码放在代码/源代码控制中。通过上述方法创建的用户账号没有其他人所说的
PasswordHash
,因此无法登录。我要做的是到达应用程序站点,然后单击“忘记密码”(因为我也实现了该逻辑)。它将生成密码重置令牌,并向我的电子邮件发送一封电子邮件,其中包含我可以创建的链接,以返回应用程序重置我的密码。
vdgimpew4#
我不认为你可以在没有密码的情况下验证用户。作为一个解决方案:在创建用户和验证凭据时,我建议使用C#代码中的一些虚拟/通用密码,而不是空密码。
创建用户时
字符串
验证时
型