ASP.NET 'FindByNameAsync'返回空?



我有一个问题与ForgotPassword方法的基础asp.net身份。当逐步执行代码时,行var user = await UserManager.FindByNameAsync(model.Email);返回null,即使我已经确认用户的电子邮件地址存在于aspnetusers表中。我不知道为什么Visual Studio不允许我进入FindByNameAsync方法?不知道这是怎么回事?

public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = await UserManager.FindByNameAsync(model.Email);
        if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
        {
            // Don't reveal that the user does not exist or is not confirmed
            return View("ForgotPasswordConfirmation");
        }
        var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
        var callbackUrl = Url.Action("ResetPassword", "Account", 
        new { UserId = user.Id, code = code }, protocol: Request.Url.Scheme);
        await UserManager.SendEmailAsync(user.Id, "Reset Password", 
        "Please reset your password by clicking here: <a href="" + callbackUrl + "">link</a>");        
        return View("ForgotPasswordConfirmation");
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

这通常发生在您使用Microsoft.AspNetCore.Identity.UserManager中的CreateAsync的其他方法创建用户时。我有同样的问题,因为我直接通过EF创建用户,而不是引用的方法。

所有FindBy方法使用这种方法应该能正常工作

您正在尝试通过电子邮件地址查找用户。

你应该使用UserManager。FindByEmailAsync

我在基于ASP的项目中遇到了类似的问题。. NET Core 2.2。也许我的解决方案会对某人有用。

用户可以在UserProfile组件中更改其UserName(默认情况下,UserName与Email相同,即user1@mail.com)。如果用户将配置文件中的用户名从默认的user1@mail.com更改为user1,则他们不能使用这个新用户名登录,只能使用Email。

下面这行总是返回NULL。

var user = await _userManager.FindByNameAsync(request.UserName);

在调查了AspCore存储库之后,我找到了FindByNameAsync方法。我开始怀疑NormalizeName线。我当前的UserProfile模型只有UserName属性,后来使用Automapper将其映射并保存到数据库中。因此,我添加了computed NormalizedUserName属性,并将其映射为Automapper (_mapper.Map(UserProfileModel, dbUser);),并将其保存到数据库中。

        public string NormalizedUserName
        {
            get
            {
                return UserName.ToUpper().Normalize(); // `UserManager` UserFindByNameAsync method is using `normalizedName` = `NormalizedUserName` from Users table (for some reason UPPERCASE, maybe SQL performance), otherwise we will always get NULL
            }
        }

上面提到的变化解决了我使用FindByNameAsync方法时NULL的问题。

当User表应用了查询过滤器,并且不满足过滤条件时,就会发生这种情况。

相关内容

  • 没有找到相关文章

最新更新