public AccessRefreshToken(User user) { AccessToken = new JWT(user); using (var _db = new BelTwitContext(Helper.BelTwitDbOptions)) { //еслі больше 5 токенов, то удаляем (безопасность!) var userRefreshTokens = _db.RefreshTokens. Where(p => p.UserId == user.Id) .ToList(); if (userRefreshTokens.Count > 5) { _db.RefreshTokens.RemoveRange(userRefreshTokens); } RefreshToken = new RefreshToken { TokenValue = new Guid(), ExpiresAt = DateTime.Now.AddDays(60), //AddSeconds(20) - for testing UserId = user.Id }; _db.RefreshTokens.Add(RefreshToken); _db.SaveChanges(); } }
public void UpdateTokens() { //подгружается User от нужного Refresh (нужно для обновленія токенов) //лібо для удаления из БД при expire Refresh-а using (var _db = new BelTwitContext(Helper.BelTwitDbOptions)) { var refreshFromDb = _db.RefreshTokens. FirstOrDefault(p => p.TokenValue == RefreshToken.TokenValue); if (refreshFromDb == null) { throw new Exception("Refresh token doesn't exist in database anymore"); } RefreshToken = refreshFromDb; _db.Entry(RefreshToken).Reference(p => p.User).Load(); if (RefreshToken.User == null) { throw new Exception("User of this token doesn't exist in database anymore"); } } if (RefreshToken.ExpiresAt < DateTime.Now) { //удаляем із бд его using (var _db = new BelTwitContext(Helper.BelTwitDbOptions)) { _db.RefreshTokens.Remove(RefreshToken); _db.SaveChanges(); } throw new Exception("Refresh token expired. Authentificate again!"); } //при обновлении Access обновляется і Refresh //expiration у Refresh нужен только лішь для случаю отсутсвія в сеті 60 дней (тогда нужно вводіть пароль) if (AccessToken.IsTokenExpired()) { AccessToken = new JWT(RefreshToken.User); using (var _db = new BelTwitContext(Helper.BelTwitDbOptions)) { _db.RefreshTokens.Remove(RefreshToken); var refreshToken = new RefreshToken { TokenValue = new Guid(), ExpiresAt = DateTime.Now.AddDays(60), UserId = RefreshToken.UserId, User = RefreshToken.User }; _db.RefreshTokens.Add(refreshToken); _db.SaveChanges(); RefreshToken = refreshToken; } } }
public AccessRefreshToken(string accessToken, string refreshToken, bool CheckForExpiration = true) { using (var _db = new BelTwitContext(Helper.BelTwitDbOptions)) { RefreshToken = _db.RefreshTokens. FirstOrDefault(p => p.TokenValue == new Guid(refreshToken)); if (RefreshToken == null) { throw new Exception("Refesh token doesn't exist in database"); } AccessToken = new JWT(accessToken, CheckForExpiration); //тут еслі что токен expired ошібка выскочіт } }
public AuthController(BelTwitContext context, ILoggerFactory loggerFactory) { _db = context; _logger = loggerFactory.CreateLogger("DatabaseLogger"); }
public DatabaseLoggerProvider(BelTwitContext context) { _context = context; }
public static ILoggerFactory AddDatabase(this ILoggerFactory factory, BelTwitContext context) { factory.AddProvider(new DatabaseLoggerProvider(context)); return(factory); }
public DatabaseLogger(BelTwitContext context) { _db = context; }