Beispiel #1
0
        public async Task <ResponseModel> Handle(UserLoginRequest request, CancellationToken cancellationToken)
        {
            var user = await _userManager.FindByEmailAsync(request.Email)
                       ?? await _userManager.FindByNameAsync(request.Email);

            var passwordIsCorrect = await _userManager.CheckPasswordAsync(user, request.Password);

            if (passwordIsCorrect)
            {
                var roles = await _userManager.GetRolesAsync(user);

                var claims = new List <Claim>
                {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString())
                };

                claims.AddRange(JwtHelper.GenerateClaims(ClaimTypes.Role, roles.ToList()));

                var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);

                if (claims != null && claimsPrincipal?.Identity is ClaimsIdentity claimsIdentity)
                {
                    claimsIdentity.AddClaims(claims);
                    await _signInManager.SignInWithClaimsAsync(user,
                                                               true,
                                                               claimsIdentity.Claims);
                }

                return(new ResponseModel
                {
                    StatusCode = HttpStatusCode.OK,
                    Data = new
                    {
                        access_token = JwtHelper.GenerateJwtToken(claims, _configuration),
                        role = roles.ToList()
                    }
                });
            }
            else
            {
                return(new ResponseModel
                {
                    StatusCode = HttpStatusCode.BadRequest,
                    Message = "User or Password is invalid"
                });
            }
        }