예제 #1
0
        public async Task <IActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                ApplicationUser user = new ApplicationUser {
                    Email = model.Email, UserName = model.Email
                };
                // добавляем пользователя
                var result = await _userManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    // генерация токена для пользователя
                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    await _userManager.AddToRoleAsync(user, MyIdentityRole.ROLE_USER);

                    var callbackUrl = Url.Action(
                        "ConfirmEmail",
                        "Password",
                        new { userId = user.Id, code = code },
                        protocol: HttpContext.Request.Scheme);

                    _logger.LogInformation($"Подтвердите регистрацию,<br/> перейдя по ссылке: <a href='{callbackUrl}'>link</a>");

                    await SharedFunc.SendEmail(model.Email, $"Подтвердите регистрацию,<br/> перейдя по ссылке: <a href='{callbackUrl}'>link</a>", $"Подтвердите регистрацию");

                    _ctx.Add(new xUserInfo
                    {
                        email      = model.Email,
                        name       = model.Email,
                        family     = model.Email,
                        partonymic = model.Email,
                        //theClient  = request.OrganizationId,
                        phone       = "",
                        islocked    = 0,
                        login       = user.Id.ToString(),
                        xUserInfoId = user.Id
                    });
                    await _ctx.SaveChangesAsync();

                    return(Content("Для завершения регистрации проверьте электронную почту и перейдите по ссылке, указанной в письме"));
                }
                else
                {
                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
            }
            return(View(model));
        }
예제 #2
0
        public async Task <IActionResult> ForgotPassword(ForgotPasswordViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(model.Email);

                if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
                {
                    // пользователь с данным email может отсутствовать в бд
                    // тем не менее мы выводим стандартное сообщение, чтобы скрыть
                    // наличие или отсутствие пользователя в бд
                    return(View("ForgotPasswordConfirmation"));
                }

                var code = await _userManager.GeneratePasswordResetTokenAsync(user);

                var callbackUrl = Url.Action("ResetPassword", "Password", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);
                await SharedFunc.SendEmail(model.Email,
                                           $"Для сброса пароля пройдите по ссылке: <a href='{callbackUrl}'>link</a>", "Reset Password");

                return(View("ForgotPasswordConfirmation"));
            }
            return(View(model));
        }