in src/Services/User/User.Infrastructure/Identity/IdentityService.cs [62:120]
public async Task<(Result Result, string UserId)> CreateUserAsync(string userToken,
string userName,
string password)
{
logger.LogInformation("Start creating {userName} user with token {userToken}.", userName, userToken);
//The identifier is not verified on the ASP.NET Identity side
(Result findResult, ApplicationUser user) = await FindUserByTokenAsync(userToken);
if (findResult.Succeeded)
{
Result result = Result.ValidationError(new InnerError(ErrorTarget.DuplicateUserToken, "This user token is already taken."));
logger.LogError("Error creating user with token {userToken}. Errors: {@message}", userToken, result.Errors);
return (result, user.Id);
}
user = new ApplicationUser(userToken)
{
UserName = userName
};
IdentityResult identityResult = await userManager.CreateAsync(user, password);
if (!identityResult.Succeeded)
{
Result result = identityResult.ToApplicationResult();
logger.LogError("Error creating user with token {userToken}. Errors: {@message}", userToken, result.Errors);
return (result, user.Id);
}
logger.LogInformation("Successfully created {userName} user with token {userToken}.", userName, userToken);
var userRoleName = Roles.User.ToString("G");
identityResult = await userManager.AddToRoleAsync(user, userRoleName);
if (!identityResult.Succeeded)
{
Result result = identityResult.ToApplicationResult();
logger.LogError("Error on assignment role {userRoleName} for user with token {userToken}. Errors: {@message}",
userRoleName,
userToken,
result.Errors);
return (result, user.Id);
}
logger.LogInformation("Successfully assigned role {userRoleName} for {userName} user with token {userToken}.",
userRoleName,
userName,
userToken);
return (Result.Success(), user.Id);
}