代表ASP.Net核心身份创建用户 - 自动生成密码

时间:2017-05-18 05:46:12

标签: asp.net-core asp.net-identity-3

我需要在不提供passowrd的情况下在ASP.Net Core中创建用户,因为它会在收到带有临时凭证的确认电子邮件后由用户自行重置。

多年前,我通过自动生成密码,然后在数据库中添加用户,然后发送新的用户确认电子邮件,使用MVC4做了类似的事情:

                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);

您如何使用ASP.Net Core身份做类似的事情?

谢谢

西尔

1 个答案:

答案 0 :(得分:0)

像这样的东西,我写得很快,所以我可能错过了一些东西。

这是非常不言自明的,如果你不明白的话,请告诉我。

[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();
}