Exemplo n.º 1
0
        public async Task <IActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    AppUser user = _authService.Login(model.Username, model.Password);
                    if (null != user)
                    {
                        List <Claim> userClaims = new List <Claim>
                        {
                            new Claim("displayName", user.DisplayName),
                            new Claim("username", user.Username),
                            new Claim(ClaimsIdentity.DefaultNameClaimType, user.Username)
                        };
                        Employee empl = repository.Employees.FirstOrDefault(e => e.Account.Equals(model.Username));
                        if (empl == null)
                        {
                            empl = new Employee()
                            {
                                Account    = model.Username,
                                Email      = user.Email,
                                FullName   = user.DisplayName,
                                Position   = user.Position,
                                UserRoleID = 0
                            };
                            repository.SaveEmployee(empl);
                        }
                        else
                        {
                            if (empl.UserRoleID == 1)
                            {
                                userClaims.Add(new Claim(ClaimTypes.Role, "Admins"));
                            }
                            else
                            {
                                userClaims.Add(new Claim(ClaimTypes.Role, "Users"));
                            }
                        }
                        ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims, _authService.GetType().Name, ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType));
                        await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

                        return(Redirect(returnUrl ?? "/"));
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError(string.Empty, ex.Message);
                }
            }
            return(View(model));
        }
        public async Task <IActionResult> Signin([FromForm] SignInViewModel model, string returnUrl = null)
        {
            this.ViewData["ReturnUrl"] = returnUrl;

            if (this.ModelState.IsValid)
            {
                try
                {
                    var user = _ldapService.Authenticate(model.UserName, model.Password);

                    if (user != null)
                    {
                        var userClaims = new List <Claim>
                        {
                            new Claim("displayName", user.DisplayName),
                            new Claim("userName", user.UserName)
                        };
                        var principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims, _ldapService.GetType().Name));
                        await HttpContext.SignInAsync("app", principal);

                        return(View("HomePage"));
                    }

                    // I added the exclamation mark to make it more dramatic
                    this.TempData["ErrorMessage"] = "The username and/or password are incorrect!";

                    return(View("ErrorPage"));
                }
                catch (Exception ex)
                {
                    this.TempData["ErrorMessage"] = ex.Message;

                    return(View("ErrorPage"));
                }
            }

            return(View("Views/ErrorPage"));
        }