ASP.NET Core和Angular 7(使用IdentityUser)的电子邮件确认



我想在我的注册过程中实现电子邮件确认,我正在使用 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();
        }
      }

如果要在应用程序中实现电子邮件确认,则应:

  1. 将发送电子邮件确认(带有链接(的说明添加到您的注册方法中。

    var token = await _userManager.GenerateEmailConfirmationTokenAsync(YourUserEntity(;

它将生成一个令牌来确认用户的电子邮件。 - 为您的 angular 应用程序创建一个回调链接,例如:

var callBackUrl = "http://localhost:4200/Profile/ConfirmEmail?userId="+usrIdentity.Id + "&token=" + code;

然后,将 callBackUrl 发送到用户电子邮件。

  1. 在您的角度应用程序中,一旦用户单击电子邮件上发送的链接,您应该为 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 /* }
}

相关内容

  • 没有找到相关文章

最新更新