예제 #1
0
        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/"));
        }
예제 #2
0
        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"));
        }