public async Task <IActionResult> Login(LoginViewModel model) { if (ModelState.IsValid) { var user = await _loginService.FindByUsername(model.Email); if (await _loginService.ValidateCredentials(user, model.Password)) { if (user.EmailConfirmed) { await SigninAsync(user, model.ReturnUrl, model.RememberMe).ConfigureAwait(false); // make sure the returnUrl is still valid, and if yes - redirect back to authorize endpoint if (_interaction.IsValidReturnUrl(model.ReturnUrl)) { return(Redirect(model.ReturnUrl)); } return(Redirect("~/")); } else { ModelState.AddModelError("", ConstantMessages.RegisterConfirmationMessage(model.Email)); } } else { ModelState.AddModelError("", "Не верные логин или пароль"); } } // something went wrong, show form with error var vm = await BuildLoginViewModelAsync(model); ViewData["ReturnUrl"] = model.ReturnUrl; return(View(vm)); }
public async Task <IActionResult> Register(RegisterViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, //CardHolderName = model.User.CardHolderName, //CardNumber = model.User.CardNumber, //CardType = model.User.CardType, //City = model.User.City, //Country = model.User.Country, //Expiration = model.User.Expiration, //LastName = model.User.LastName, //Name = model.User.Name, //Street = model.User.Street, //State = model.User.State, //ZipCode = model.User.ZipCode, //PhoneNumber = model.User.PhoneNumber, //SecurityNumber = model.User.SecurityNumber }; var userDto = await _userManager.FindByNameAsync(user.UserName).ConfigureAwait(false); if (userDto != null && !userDto.EmailConfirmed && // не подтвержден userDto.Created < DateTime.Now - TimeSpan.FromHours(Config.UserMailConfirmTimeHours) ) // и висит больше суток { var deleteResult = await _userManager.DeleteAsync(userDto).ConfigureAwait(false); if (deleteResult.Errors.Any()) { AddErrors(deleteResult); // If we got this far, something failed, redisplay form return(View(model)); } } var result = await _userManager.CreateAsync(user, model.Password).ConfigureAwait(false); if (result.Errors.Any()) { AddErrors(result); // If we got this far, something failed, redisplay form return(View(model)); } userDto = await _userManager.FindByNameAsync(user.UserName).ConfigureAwait(false); await _userManager.AddToRoleAsync(userDto, "user").ConfigureAwait(false); // отправка емейла для подтверждения (в линк закладываем id юзера, hashCheck - хэш пароля, returnUrl - урл магазина, куда редиректнем после логина) // ... var token = await _userManager.GenerateEmailConfirmationTokenAsync(userDto).ConfigureAwait(false); var link = GetConfirmationLink(userDto.Id, token, returnUrl); // TODO: Отправка email // await _emailSender.SendAsync(user.Id, // "Подтверждение регистрации", // $"Пожалуйста подтвердите регистрацию кликнув по ссылке: <a href=\"{link}\">Подтвердить</a>"); } ViewBag.Message = ConstantMessages.RegisterConfirmationMessage(model.Email); return(View("Success")); }