提问人:Aboliii 提问时间:11/3/2023 更新时间:11/13/2023 访问量:60
我无法通过 ASP.NET Core 中的标识创建用户
I can't create a user through Identity in ASP.NET Core
问:
我正在处理一个 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 添加到项目中,但我仍然得到了相同的结果!
答:
0赞
Akalanka Dissanayake
11/9/2023
#1
首先,我强烈建议您在登录失败时不要创建用户。
问题是,在创建用户之前无法添加声明。如果你想看到异常,你可以在函数中添加try catch块。await _userManager.AddClaimAsync(user, claim);
如果您想要使用 api Asp.net 核心身份的正确示例,请遵循此操作。
评论