gpt4 book ai didi

asp.net - 使用 ASP.NET Identity 创建无密码的用户

转载 作者:行者123 更新时间:2023-12-02 09:13:19 26 4
gpt4 key购买 nike

我被要求提供通过 UI 无需密码创建用户的能力。我正在尝试使用 ASP.NET Identity 来完成此任务。

我能够使用 UserManagerCreate 方法成功创建一个没有密码的用户:

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 Identity,当凭据包含 NULL 密码并且数据库中的用户包含 NULL 时,如何配置我的代码以正确验证用户凭据> 密码哈希?这样的事有可能吗?

最佳答案

好的,您需要做的是使用数据库上下文找到用户(AspNetUsers 用户)。获得用户后,您可以检查他们的 PasswordHash 是否为空。如果是,则只需使用 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);
}

希望有帮助。

关于asp.net - 使用 ASP.NET Identity 创建无密码的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com