2017-05-18 2 views
0

Je dois créer des utilisateurs dans ASP.Net Core sans fournir le mot de passe car il sera réinitialisé par l'utilisateur lui-même après avoir reçu l'email de confirmation avec des informations d'identification temporaires.Créer des utilisateurs pour le compte dans ASP.Net Core Identity - Auto Générer le mot de passe

Il y a quelques années, je l'ai fait quelque chose de similaire en utilisant MVC4 en générant automatiquement un mot de passe, puis en ajoutant l'utilisateur dans le DB, puis l'envoi d'un nouvel e-mail de confirmation de l'utilisateur:

   String password = Membership.GeneratePassword(10, 3); 

       WebSecurity.CreateUserAndAccount(model.UserName, password, new { Organization = model.SelectedOrganization, Email = model.Email }); 
       Roles.AddUserToRole(model.UserName, model.SelectedRole); 
       IDictionary<string, string> data = new Dictionary<string, string>(); 
       data.Add("name", model.UserName); 

       data.Add("password", password);     
       String subject = String.Format("\"{0}\" - You can now connect to Web Tagging Data System ", model.UserName); 
       String body = new TemplatingService().GetTemplatedDocument("NewUserEmail.vm", data); 
       new EmailServices().SendEmail(subject, body, model.Email); 
       MessageModel messageModel = new MessageModel(); 
       messageModel.Body = "An email has been sent to this user with its credentials"; 
       return View("Message", messageModel); 

Comment voulez-vous faire quelque chose de similaire avec ASP.Net Identité de base?

Merci

Sylvain

Répondre

2

Quelque chose comme ça, je l'ai écrit sur quelque chose de réel rapide je puis avoir manqué.

C'est assez explicite, laissez-moi savoir si vous ne comprenez pas quelque chose.

[HttpPost] 
public async Task<IActionResult> CreateAccount(CreateUser model) 
{ 
    var user = new User 
    { 
     Email = model.Email, 
     Username = model.Email 
    } 

    var identityResult = await _userManager.CreateAsync(user); 

    if (identityResult.Succeeded) 
    { 
     var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); 
     var emailResult = await _mailService.SendMailAsync("Click here to confirm your account.", token); 

     if (emailResult) 
     { 
      return Ok(); 
     } 

     return StatusCode(500); 
    } 

    return BadRequest(); 
} 

[HttpPost] 
public async Task<IActionResult> ConfirmAccount(ConfirmUser model) 
{ 
    var user = _userManager.FindByIdAsync(model.UserId); 
    if (user == null) return BadRequest(); 

    var emailResult = await _userManager.ConfirmEmailAsync(user, model.token); 

    if (emailResult.Succeeded) 
    { 
     var identityResult = await _userManager.AddPasswordAsync(user, model.Password); 

     if (identityResult.Succeeded) return Ok(); 
    } 

    return BadRequest(); 
}