我正在使用/user/logout
创建路由dusterio/lumen-passport
,并在控制器操作中手动撤消令牌,导致用户退出。
我有两个注销用户的选项。撤消令牌(将令牌保留在数据库中 - 只需设置一个告知令牌无效的标志)并删除令牌。
我的问题很简单:
管理令牌的最佳方法是什么?我应该通过删除或撤销来退出吗?
将来,我将使用redis来存储令牌,所以我想我应该删除令牌,因为在redis服务器中保留过期数据是没有意义的。
答案 0 :(得分:7)
1)撤销令牌或使令牌失效。
2)每次调用受保护的API时,都应检查令牌的有效性,然后仅相应地处理请求。
3)如果遇到无效令牌,请将用户重定向到登录页面,并在成功身份验证后颁发有效令牌,然后将他们再次重定向到请求的页面。
使用这种方法,即使在同一浏览器的另一个选项卡/窗口中打开了现有会话,并且即使用户在注销/会话超时后仍未登录,这仍将确保所有用户都使用有效令牌。时间。
存储过期的令牌绝对没有意义。将JWT令牌存储在数据库中也不是正确的做法。它们仅应存储在会话数据中,并在更改有效性时删除/替换。
因此,仅将用于特定目的的单个有效JWT令牌存储在会话数据中。假设您的JWT令牌发行者服务器具有最佳实现,请确保再也不会获得相同的JWT令牌。因此,到期后再存储它们绝对没有意义。