我无法通过 ASP.NET Core 中的标识创建用户

I can't create a user through Identity in ASP.NET Core

提问人:Aboliii 提问时间:11/3/2023 更新时间:11/13/2023 访问量:60

问:

我正在处理一个 Rest API 项目。它是按照 Clean Architecture 完成的。该 API 受 JWT 保护,因此一旦获得令牌,就可以修改数据库中的模型和实体。我使用 Identity 作为用户的凭据。我遇到了一个奇怪的情况!我无法在数据库中创建任何用户。原来,与创建新用户相关的代码行根本没有通过调试被击中! 下面是表示层 (API) 中的操作

[AllowAnonymous]
[HttpPost, Route("login")]
public IActionResult Login(UserModel model)
{
    _userService.LoginUser(model);
    return Ok(new {token = CreateToken()});
}

它指向基础结构层中的 LoginUser 函数

public async Task LoginUser(UserModel model)
{
    if(model == null) throw new ArgumentNullException("model");
    if(_productDbContext.Users.Any(c=> c.Email == model.Email))
    {
        await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
    }
    else
    {
        var user = new User
        {
            UserName = model.Email,
            Email = model.Email
        };
        Claim claim = new Claim(
            type: ClaimTypes.Role,
            value: model.Email
            );
        await _userManager.AddClaimAsync(user, claim);
        var result = await _userManager.CreateAsync(user, model.Password);
    }
}

此时,调试器不会命中最后一行,即结果变量!而且我也看不到任何错误!

我认为这可能是 User 类的问题,所以我将 Automapper 添加到项目中,但我仍然得到了相同的结果!

C# 网络-API ASP.NET 标识

评论


答:

0赞 Akalanka Dissanayake 11/9/2023 #1

首先,我强烈建议您在登录失败时不要创建用户。

问题是,在创建用户之前无法添加声明。如果你想看到异常,你可以在函数中添加try catch块。await _userManager.AddClaimAsync(user, claim);

如果您想要使用 api Asp.net 核心身份的正确示例,请遵循此操作