2023-02-15 269
我已被要求提供通过UI创建用户的能力,没有密码.我正在尝试使用ASP.NET身份完成这一点.
我能够使用UserManager s 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?这是可能的吗?
是的,您可以. ASP.NET Identity Framework是完全可定制的.只是覆盖PasswordValidator.ValidateAsync和PasswordHasher.VerifyHashedPassword方法,如下所示:
internal class CustomPasswordValidator: PasswordValidator
{
public override async Task<IdentityResult> ValidateAsync(string item)
{
if (string.IsNullOrEmpty(item)) return IdentityResult.Success;
return await base.ValidateAsync(item);
}
}
internal class CustomPasswordHasher : PasswordHasher
{
public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
{
if (hashedPassword == null && string.IsNullOrEmpty(providedPassword))
return PasswordVerificationResult.Success;
return base.VerifyHashedPassword(hashedPassword, providedPassword);
}
}
并设置它们:
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
manager.PasswordValidator = new CustomPasswordValidator();
manager.PasswordHasher = new CustomPasswordHasher();
好的,您需要做的是使用DB上下文找到用户(AspNetUsers用户).拥有用户后,可以检查它们的PasswordHash是否为null.
如果是,则只需使用SignInManager.SignIn签署它们.
如果没有,请使用SignInManager.PasswordSignIn.
示例..
//alternatively, you can find the user using Email, Id or some other unique field
var user = db.AspNetUsers.FirstOrDefault(p => p.UserName);
if (user != null)
{
if (user.PasswordHash == null)
await SignInManager.SignInAsync(user, true, true);
else
await SignInManager.PasswordSignInAsync(model.UserName, model.Password,
model.RememberMe, shouldLockout: false);
}
我不认为您可以在没有密码的情况下验证用户.作为解决方法:而不是空白密码,我建议使用C#代码中的一些虚拟/公共密码,同时创建用户,同时验证凭据
创建用户时
if (vm.ShouldHavePassword)
{
userManager.Create(userToInsert, vm.Password);
}
else
{
userManager.Create(userToInsert, "someDummy123$");
}
验证时
result = await SignInManager.PasswordSignInAsync(model.UserName, "someDummy123$", model.RememberMe, shouldLockout: false);
以上所述是小编给大家介绍的使用ASP.NET身份认证创建没有密码的用户,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/33760.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态