Aller au contenu principal

👹 Boss: UserManager

À la dernière étape, vous avez créé la base d'un contrôleur pour créer un compte:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(CreerCompteViewModel creerCompteViewModel)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
UserName = creerCompteViewModel.Email,
Email = creerCompteViewModel.Email,
Prenom = creerCompteViewModel.Prenom,
Nom = creerCompteViewModel.Nom
};
}

return View("New", creerCompteViewModel);
}
  1. Utilisez l'objet _userManager pour créer le compte de l'utilisateur dans la base de données.

    astuce

    La fonction CreateAsync peut prendre deux arguments:

    • Un utilisateur

    • Un mot de passe

    https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.createasync?view=aspnetcore-9.0#microsoft-aspnetcore-identity-usermanager-1-createasync(-0-system-string)

    Elle retourne un résultat IdentityResult sur laquelle une propriété permet de vérifier si l'opération de création a été un succès.

    De plus, pour votre information, UserManager utilise votre UserRepository. Plus particulièrement la fonction CreateAsync de ce dernier.

    Snowfall.Data/Repositories/UserRepository.cs
    public async Task<IdentityResult> CreateAsync(ApplicationUser user, CancellationToken cancellationToken)
    {
    cancellationToken.ThrowIfCancellationRequested();

    using (var connection = _dbContext.CreateConnection())
    {
    string sql = @"
    INSERT INTO application_users (username, normalized_username, email,
    normalized_email, email_confirmed, password_hash, prenom, nom)
    VALUES (@UserName, @NormalizedUserName, @Email, @NormalizedEmail, @EmailConfirmed, @PasswordHash, @Prenom, @Nom)
    RETURNING id";

    user.Id = await connection.QuerySingleAsync<string>(sql, user);
    }

    return IdentityResult.Success;
    }
  2. Testez le formulaire. Vous devriez pouvoir remplir le formulaire et cela devrait créer un utilisateur dans la base de données.

    attention

    Utilisez un mot de passe d'au moins 8 caractères avec 1 caractère spécial, une majuscule et un chiffre.

    Allez jeter un coup d'œil à la table application_users, un utilisateur devrait être créé.

    Imgur

  3. Si le résultat est un succès (après la sauvegarde en BD), connectez l'utilisateur à l'aide de _signInManager, de la même façon que vous le faites dans le contrôleur d'authentification. De plus, redirigez vers la page d'accueil après avoir utilisé _signInManager.

astuce

L'opération de création d'utilisateurs retourne un objet de type IdentityResult qui devrait pouvoir vous renseigner sur le succès de l'opération de création. Vous voudrez créer la session de l'utilisateur seulement dans le cas où le statut de IdentityResult est positif.

http://localhost:4200
  1. Votre utilisateur n'aura pas de rôle d'assigné. Juste avant de connecter l'utilisateur à l'aide de _signInManager, donc dans la condition de succès, utilisez AddToRoleAsyc sur _userManager pour ajouter l'utilisateur au rôle Utilisateur. Testez et vérifiez que l'utilisateur que vous venez de créer a bien le bon rôle dans la BD. img

level up