public async Task <IActionResult> Logout() { try { var userId = _cookieSvc.Get("user_id"); if (userId != null) { var protectorProvider = _provider.GetService <IDataProtectionProvider>(); var protector = protectorProvider.CreateProtector(_dataProtectionKeys.ApplicationUserKey); var unprotectedToken = protector.Unprotect(userId); var rt = _db.Tokens.FirstOrDefault(t => t.UserId == unprotectedToken); // First remove the Token if (rt != null) { _db.Tokens.Remove(rt); } await _db.SaveChangesAsync(); // Second remove all Cookies _cookieSvc.DeleteAllCookies(cookiesToDelete); } } catch (Exception ex) { _cookieSvc.DeleteAllCookies(cookiesToDelete); Log.Error("An error occurred while seeding the database {Error} {StackTrace} {InnerException} {Source}", ex.Message, ex.StackTrace, ex.InnerException, ex.Source); } Log.Information("User logged out."); return(RedirectToLocal(null)); }
public async Task <IActionResult> Logout() { try { var user_id = _cookieSvc.Get(User_Id); if (user_id != null) { var protectProvider = _provider.GetService <IDataProtectionProvider>(); var protector = protectProvider.CreateProtector(_dataProtectionKeys.ApplicationUserKey); var unprotectedUserId = protector.Unprotect(user_id); var refreshToken = _db.tokens.FirstOrDefault(t => t.UserId == unprotectedUserId); if (refreshToken != null) { _db.tokens.Remove(refreshToken); } await _db.SaveChangesAsync(); _cookieSvc.DeleteAllCookies(cookiesToDelete); } } catch (Exception ex) { _cookieSvc.DeleteAllCookies(cookiesToDelete); Log.Error("Error while store the database logout {Error} {StackTrace} {InnerException} {Source}", ex.Message, ex.StackTrace, ex.InnerException, ex.Source); } Log.Information("Log out successfully"); return(RedirectToLocal(null)); }
public async Task <bool> LogoutUserAsync() { var cookiesToDelete = new[] { "twoFactorToken", "memberId", "rememberDevice", "access_token", "loginStatus", "refreshToken", "userRole", "username", "user_id" }; try { var username = _cookieSvc.Get("username"); if (username != null) { var user = await _userManager.FindByNameAsync(username); var memberToken = await _db.Tokens.Where(x => x.UserId == user.Id).ToListAsync(); if (memberToken.Count > 0) { _db.Tokens.RemoveRange(memberToken); await _db.SaveChangesAsync(); } _cookieSvc.DeleteAllCookies(cookiesToDelete); return(true); } } catch (Exception ex) { Log.Error("An error occurred while seeding the database {Error} {StackTrace} {InnerException} {Source}", ex.Message, ex.StackTrace, ex.InnerException, ex.Source); } _cookieSvc.DeleteAllCookies(cookiesToDelete); return(false); }