示例#1
0
        public async Task <AuthSuccessResult> Refresh(refreshViewModel model)
        {
            var token = await _refreshTokens.GetQueryable(x => x.Token == model.refresh).Include(x => x.User).FirstOrDefaultAsync();

            var refresh_time = _configuration.GetSection("JWT").GetValue <int>("REFRESH_LIFETIME");

            if (token == null)
            {
                throw new Exception("We can't find your token...");
            }

            if (token.ToLife.AddMinutes(refresh_time) <= DateTime.Now)
            {
                throw new Exception("Refresh token is expired...");
            }

            var handler       = new JwtSecurityTokenHandler();
            var decrypt_token = handler.ReadJwtToken(model.token);

            if (decrypt_token.Claims.FirstOrDefault(x => x.Type == ClaimsIdentity.DefaultNameClaimType).Value != token.User.Id)
            {
                throw new Exception("Unknown error...");
            }

            return(new AuthSuccessResult()
            {
                access_token = _jWTService.CreateToken(token.User),
                refresh_token = _jWTService.CreateRefreshToken(token.User),
                ava = token.User.img
            });
        }