我需要在不提供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身份做类似的事情?
谢谢
西尔
答案 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();
}