Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
      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));
      }
Exemplo n.º 3
0
        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);
        }