예제 #1
0
        public async Task <User> CheckToken(string token)
        {
            var userToken     = token.Split(' ')[1];
            var tokenSettings = TokenResponse.FromToken(userToken);
            var user          = await _context.User.FirstOrDefaultAsync(x => x.Id == tokenSettings.Id);

            return(user);
        }
예제 #2
0
        public async Task <JWTToken> Refresh(RefreshRequest tokens)
        {
            var claims       = TokenResponse.FromToken(tokens.JWTToken);
            var allTokens    = _context.UserToken.Where(x => x.UserId == claims.Id);
            var refreshToken = await allTokens.FirstOrDefaultAsync(x => x.RefreshToken == tokens.RefreshToken);

            if (refreshToken == null || refreshToken.ExpiryDate < DateTime.Now)
            {
                return(null);
            }

            var user = await _context.User.FirstOrDefaultAsync(x => x.Id == claims.Id);

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

            var newJwtToken = new TokenResponse()
            {
                Id   = user.Id,
                Role = user.Role
            }.ToToken(_config);
            var newRefreshToken = TokenHelper.GenerateRefreshToken();
            var now             = DateTime.Now;
            var expiryDate      = now.AddDays(7);


            refreshToken = new UserToken()
            {
                LastUpdated  = now,
                ExpiryDate   = expiryDate,
                RefreshToken = newRefreshToken,
                Id           = refreshToken.Id,
                UserId       = refreshToken.UserId,
                User         = refreshToken.User
            };

            _context.Update(refreshToken);
            await _context.SaveChangesAsync();

            return(new JWTToken()
            {
                JwtToken = newJwtToken.JwtToken,
                RefreshToken = newRefreshToken,
                Exp = new DateTimeOffset(expiryDate).ToUnixTimeSeconds(),
                Nbf = new DateTimeOffset(now).ToUnixTimeSeconds()
            });
        }