public async Task <IActionResult> Login(WelcomeModel loginModel) { var foundUser = _context.Users.Where(u => u.UserName.Equals(loginModel.UserName)).FirstOrDefault(); var result = await _signInManager.PasswordSignInAsync(loginModel.UserName, loginModel.Password, true, lockoutOnFailure : false); if (result.Succeeded) { _logger.LogInformation("User logged in."); var claims = new List <Claim> { new Claim("UserId", foundUser.Id), new Claim("Authenticated", "User"), new Claim(ClaimTypes.Role, "User"), }; var claimsIdentity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties { }; await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return(Redirect("/Home/")); // return Redirect("/"); } if (result.IsLockedOut) { _logger.LogWarning("User account locked out."); throw new NotImplementedException("Lockout not enabled"); } return(Redirect("/Welcome/")); }
public async Task <IActionResult> Register(WelcomeModel loginModel) { var foundUser = _context.Users.Where(u => u.UserName.Equals(loginModel.UserName)).FirstOrDefault(); if (null == foundUser) { if (loginModel.Password.Equals(loginModel.ConfirmPassword)) { var user = new SpiralLakeUser { UserName = loginModel.UserName, Email = loginModel.Email }; var result = await _userManager.CreateAsync(user, loginModel.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Action("Confirmed", "Welcome", new { userId = user.Id, code = code }, this.Request.Scheme); await _emailSender.SendEmailAsync(loginModel.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); if (_userManager.Options.SignIn.RequireConfirmedAccount) { return(View("/Views/Welcome/PendingConfirmation.cshtml")); } else { await _signInManager.SignInAsync(user, isPersistent : false); return(LocalRedirect(Request.Path.Value)); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } } return(View("/Views/Welcome/Index")); }