public async Task <IActionResult> Resend(string email)
        {
            if (string.IsNullOrWhiteSpace(email))
            {
                return(BadRequest("ResendEmailRequired"));
            }

            var user = await _userManager.FindByEmailAsync(email.Trim());

            if (user == null)
            {
                return(NotFound());
            }

            if (user.EmailConfirmed)
            {
                return(BadRequest("ResendEmailConfirmed"));
            }

            var emailConfirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            var callbackUrl     = new Uri(Url.Link("ConfirmEmail", new { id = _protector.Protect(user.Id), token = emailConfirmationToken }));
            var emailTemplateVM = new EmailTemplateVM(user.Email, callbackUrl.AbsoluteUri);
            var emailFormat     = emailTemplateVM.GetConfirmEmailFormat();

            await _messageService.SendEmailAsync("*****@*****.**", user.Email, emailFormat.Item1, null, emailFormat.Item2);

            return(new OkResult());
        }
        public async Task <IActionResult> ForgotPassword([FromBody] ForgotPasswordVM model)
        {
            if (string.IsNullOrWhiteSpace(model.Email))
            {
                return(BadRequest());
            }

            var user = await _userManager.FindByEmailAsync(model.Email.Trim());

            if (user == null)
            {
                return(NotFound());
            }

            if (!user.EmailConfirmed)
            {
                return(BadRequest("EmailNotConfirmed"));
            }

            await _userManager.UpdateSecurityStampAsync(user);                      // Generate new security stamp

            var temporaryPwd        = Guid.NewGuid().ToString("n").Substring(0, 6); // Generate a temporary password
            var passwordRequirement = "P" + temporaryPwd + "n1";                    // 숫자, 대소문자 requirement
            var token = await _userManager.GeneratePasswordResetTokenAsync(user);

            var result = await _userManager.ResetPasswordAsync(user, token, passwordRequirement); // Temporary password is now the user's current password

            var emailTemplateVM = new EmailTemplateVM(user.Email, _appSettings.Environment.Equals("Live") ? "https://talchoseon.com/" : "http://*****:*****@talchoseon.com", user.Email, emailFormat.Item1, null, emailFormat.Item2);

            return(new OkResult());
        }
        public async Task <IActionResult> Register([FromBody] RegistrationVM model)
        {
            if (!ModelState.IsValid)
            {
                string errorMsg = null;
                foreach (var m in ModelState.Values)
                {
                    foreach (var msg in m.Errors)
                    {
                        errorMsg = msg.ErrorMessage;
                    }
                }
                return(BadRequest(errorMsg));
            }

            var allUsers = _repository.GetAll();

            foreach (var au in allUsers)
            {
                if (au.NickName.ToLower().Trim().Equals(model.NickName.ToLower().Trim()))
                {
                    return(BadRequest("DuplicateNickName"));
                }
            }

            ApplicationUser newUser = new ApplicationUser
            {
                UserName    = model.Email,
                Email       = model.Email,
                NickName    = model.NickName,
                DateCreated = DateTime.UtcNow
            };

            var result = await _userManager.CreateAsync(newUser, model.Password);

            if (result.Succeeded)
            {
                var user = await _userManager.FindByEmailAsync(model.Email);

                var userRole = new IdentityRole("User");

                if (!await _userManager.IsInRoleAsync(user, userRole.Name))
                {
                    await _userManager.AddToRoleAsync(user, userRole.Name);
                }

                var emailConfirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                var callbackUrl     = new Uri(Url.Link("ConfirmEmail", new { id = _protector.Protect(user.Id), token = emailConfirmationToken }));
                var emailTemplateVM = new EmailTemplateVM(user.Email, callbackUrl.AbsoluteUri);
                var emailFormat     = emailTemplateVM.GetConfirmEmailFormat();

                await _messageService.SendEmailAsync("*****@*****.**", user.Email, emailFormat.Item1, null, emailFormat.Item2);

                var userVM = Mapper.Map <ApplicationUser, ApplicationUserVM>(user);

                return(CreatedAtRoute("GetUser", new { controller = "Account", id = user.Id }, userVM));
            }

            return(new BadRequestObjectResult(result.Errors));
        }