我想在我的注册过程中实现电子邮件确认,我正在使用 Angular 7 作为客户端,我试图通过教程自己实现它,但其中大部分都是针对 MVC 的......我想知道我到底需要什么以及它应该如何工作......
这是我的代码:
ASP 核心:
[HttpPost]
[Route("Register")]
public async Task<object> PostAppUser(AppUserModel model)
{
var result = await _userService.Register(model);
if (result != null)
return Ok(result);
else
return BadRequest(new { message = "Register failed! Please try again later" });
}
public async Task<object> Register(AppUserModel model)
{
if (model.SpecialCode == _appSettings.Special_Code)
model.Role = "admin";
else
model.Role = "customer";
var appUser = new AppUser()
{
UserName = model.UserName,
Email = model.Email,
FullName = model.FullName,
};
try
{
var result = await _userManager.CreateAsync(appUser, model.Password);
await _userManager.AddToRoleAsync(appUser, model.Role);
return result;
}
catch (Exception ex)
{
throw ex;
}
}
启动:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddScoped<IUserService, UserService>();
services.AddDbContext<AuthContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("IdentityConnection")));
services.AddDefaultIdentity<AppUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<AuthContext>();
角:
onSubmit(form: NgForm, userName: string) {
this.userService.login(form.value).subscribe(
(res: any) => {
localStorage.setItem('token', res.token);
this.router.navigateByUrl('/home');
this.toastr.success('Welcome ' + userName + '!' , 'Authentication granted');
},
(err: any) => {
if (err.status === 400) {
this.toastr.error('Incorrect User name of Password!', 'Authentication failed');
form.reset();
} else {
this.toastr.error('Our servers is down at the moment', 'Try again later');
form.reset();
}
}
如果要在应用程序中实现电子邮件确认,则应:
-
将发送电子邮件确认(带有链接(的说明添加到您的注册方法中。
var token = await _userManager.GenerateEmailConfirmationTokenAsync(YourUserEntity(;
它将生成一个令牌来确认用户的电子邮件。 - 为您的 angular 应用程序创建一个回调链接,例如:
var callBackUrl = "http://localhost:4200/Profile/ConfirmEmail?userId="+usrIdentity.Id + "&token=" + code;
然后,将 callBackUrl 发送到用户电子邮件。
- 在您的角度应用程序中,一旦用户单击电子邮件上发送的链接,您应该为 callBackURL 创建一个路由。
您应该使用 userId 和令牌(在链接上(向 WebAPI 发送请求以确认用户电子邮件并检查令牌是否有效,为此,您必须在控制器上实现一个名为 (ConfirmUserEmail( 的新 post 方法,并执行以下指令:
var dbUserResult = await _userManager.FindByEmailAsync(user.IdIdentityNavigation.Email);
if (dbUserResult != null)
{
var result = await _userManager.ConfirmEmailAsync(dbUserResult, confirmUserEntity.token);
if (result.Succeeded)
{ * Implement Your business logic here /* }
}