Angular 浏览器关闭时删除项目令牌
Angular project Token removal when browser is closed
我有一个 angular 项目,我在这个项目中提供了基于令牌的登录。当用户使用退出按钮退出时,我从数据库中删除了当前的token,但是当浏览器直接关闭时我无法删除它。我该怎么做?
处理程序代码:
public async Task<IResult> Handle(LogoutCommand request, CancellationToken cancellationToken)
{
var isThereAnyUser = await _userRepository.GetAsync(u => u.UserId == request.UserId);
isThereAnyUser.Token = "";
isThereAnyUser.RefreshToken = "";
_userRepository.Update(isThereAnyUser);
await _userRepository.SaveChangesAsync();
return new SuccessResult(Messages.logOutMessage);
}
Wep api代码:
public async Task<IActionResult> Logout([FromBody] LogoutCommand logoutCommand)
{
var result = await Mediator.Send(logoutCommand);
if (result.Success)
{
return Ok(result.Message);
}
else
return BadRequest(result.Message);
}
很难在所有情况下并跨各种浏览器实现此功能,因此您无论如何都需要一个备份解决方案来处理令牌过期。
作为替代方案,您可以为令牌指定一个存储在数据库中的到期时间,并在每次使用令牌访问 API.
时更新到期时间
流程可以概括如下:
- 用户登录:如果没有有效令牌,将创建一个登录时间 + 5 分钟的令牌。否则拒绝登录。
- 用户访问 API(使用令牌):令牌更新访问时间 + 5 分钟(如果没有 API 访问,Angular 应用程序可以定期调用API 扩展令牌)
- 用户注销:Token被删除;用户可以立即在另一台设备上登录
- 用户未注销但关闭浏览器:Token 5分钟后过期;在此之前,用户无法从另一台设备使用 API。因此到期时间应该很短(本例中为 5 分钟)
作为将到期时间存储在数据库中的替代方法,您也可以将其存储在令牌中,但您需要根据 API 请求(或定期调用)交换令牌。
我有一个 angular 项目,我在这个项目中提供了基于令牌的登录。当用户使用退出按钮退出时,我从数据库中删除了当前的token,但是当浏览器直接关闭时我无法删除它。我该怎么做?
处理程序代码:
public async Task<IResult> Handle(LogoutCommand request, CancellationToken cancellationToken)
{
var isThereAnyUser = await _userRepository.GetAsync(u => u.UserId == request.UserId);
isThereAnyUser.Token = "";
isThereAnyUser.RefreshToken = "";
_userRepository.Update(isThereAnyUser);
await _userRepository.SaveChangesAsync();
return new SuccessResult(Messages.logOutMessage);
}
Wep api代码:
public async Task<IActionResult> Logout([FromBody] LogoutCommand logoutCommand)
{
var result = await Mediator.Send(logoutCommand);
if (result.Success)
{
return Ok(result.Message);
}
else
return BadRequest(result.Message);
}
很难在所有情况下并跨各种浏览器实现此功能,因此您无论如何都需要一个备份解决方案来处理令牌过期。
作为替代方案,您可以为令牌指定一个存储在数据库中的到期时间,并在每次使用令牌访问 API.
时更新到期时间流程可以概括如下:
- 用户登录:如果没有有效令牌,将创建一个登录时间 + 5 分钟的令牌。否则拒绝登录。
- 用户访问 API(使用令牌):令牌更新访问时间 + 5 分钟(如果没有 API 访问,Angular 应用程序可以定期调用API 扩展令牌)
- 用户注销:Token被删除;用户可以立即在另一台设备上登录
- 用户未注销但关闭浏览器:Token 5分钟后过期;在此之前,用户无法从另一台设备使用 API。因此到期时间应该很短(本例中为 5 分钟)
作为将到期时间存储在数据库中的替代方法,您也可以将其存储在令牌中,但您需要根据 API 请求(或定期调用)交换令牌。