gpt4 book ai didi

asp.net-mvc - 身份 2 - 确认电子邮件,然后允许用户设置密码

转载 作者:行者123 更新时间:2023-12-01 08:51:49 25 4
gpt4 key购买 nike

我正在编写一个应用程序(MVC5、Identity 2.0 和 Entity Framework 6),它有一个只有管理员可以访问的用户部分。添加用户的唯一位置是在此部分,除非您要注册新组织(它是用户的父级)。

我已经启动并运行了所有内容,但想让用户的添加流程更好。目前,管理员使用硬编码密码创建用户,并向他们发送一封电子邮件,要求他们确认其帐户。他们单击此按钮并确认帐户,然后他们必须登录。显然,硬编码密码不适合生产应用!

我真的很喜欢添加用户,生成一个随 secret 码,发送确认帐户电子邮件,然后一旦用户点击它,他们的帐户就会被确认,然后他们被重定向到一个页面他们可以重置自己的密码。

那么,代码忍者,这可能吗?如果是这样,任何建议将不胜感激!

最佳答案

是的。您可以删除管理员输入的硬编码密码,并将您对创建用户的调用替换为 var result = await UserManager.CreateAsync(user);此时不提供密码。确保在创建时向用户发送邮件以确认电子邮件。这是一个 example .

在confirmEmail 操作 View 中,您可以创建一个密码设置表单并回发到confirmEmail。示例如下:

HTTP 获取确认电子邮件

    [AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(string userId, string code)
{
if (userId == null || code == null)
{
return View("Error");
}
var confirmed = await UserManager.IsEmailConfirmedAsync(userId);
if(confirmed)
{
return await RedirectToDashboard(userId);
}

var result = await UserManager.ConfirmEmailAsync(userId, code);

if (result.Succeeded)
{
ViewBag.userId = userId;
ViewBag.code = code;
}
return View(result.Succeeded ? "ConfirmEmail" : "Error");
}

从您设置的密码表单发送到 ConfirmEmail 的 HTTP POST:
    [HttpPost]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(SetPasswordViewModel model, string userId, string code)
{
if (userId == null || code == null)
{
return View("Error");
}
if (!ModelState.IsValid)
{
return View(model);
}
var result = await UserManager.AddPasswordAsync(userId, model.NewPassword);
if (result.Succeeded)
{
var user = await UserManager.FindByIdAsync(userId);
if (user != null)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
}
return await RedirectToDashboard(userId);
}

ViewBag.userId = userId;
ViewBag.code = code;

AddErrors(result);
return View(model);
}

要放入 ConfirmEmailView 的示例表单
    @using (Html.BeginForm("ConfirmEmail", "Account", new { userId = ViewBag.userId, code = ViewBag.code }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()

@Html.ValidationSummary("", new { @class = "color_orange" })
@Html.PasswordFor(m => m.NewPassword, new { @class = "form-control", placeholder = "New Password" })
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control", placeholder = "Confirm Password" })
<input type="submit" value="Set password" class="btn" />


}

请记住将模型添加到您的 confirmEmail View @model [ProjectName].Models.SetPasswordViewModel
并创建 SetPasswordViewModel:
    public class SetPasswordViewModel
{
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}

关于asp.net-mvc - 身份 2 - 确认电子邮件,然后允许用户设置密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com