Exemplo n.º 1
0
        public async Task <Jwt> CreateToken(TokenCreateDto dto, CancellationToken cancellationToken)
        {
            var user = _unitOfWork.UserRepository
                       .Get(u => string.Equals(u.Email, dto.Email, StringComparison.CurrentCultureIgnoreCase))
                       .FirstOrDefault();

            if (user == null)
            {
                return(null);
            }

            if (!_userService.VerifyPassword(user, dto.Password))
            {
                return(null);
            }

            var claims       = CreateClaims(user);
            var refreshToken = BuildRefreshToken(user);
            var jwt          = BuildJwt(claims);

            var token = new JwtSecurityTokenHandler().WriteToken(jwt);
            var guid  = await _tokenManager.GetGuidFromRequest(cancellationToken);

            await _tokenManager.AddNewTokens(token, refreshToken, user.Id, guid, cancellationToken);

            return(new Jwt
            {
                SecurityToken = token,
                RefreshToken = refreshToken,
                ExpiryDate = DateTime.UtcNow.AddMinutes(_options.Exp)
            });
        }