qwe*_*iop 5 django jwt django-rest-framework
我正在使用Simple JWT在 Django Rest API 中使用 JWT 令牌。它工作得很好,但我希望能够在用户注销时将令牌列入黑名单。在文档中说:
如果在 INSTALLED_APPS 中检测到黑名单应用程序,Simple JWT 会将任何生成的刷新或滑动令牌添加到未完成令牌列表中。它还会检查任何刷新或滑动令牌是否出现在令牌黑名单中,然后才将其视为有效。Simple JWT 黑名单应用程序使用两种模型实现其突出和黑名单令牌列表:OutstandingToken 和 BlacklistedToken。模型管理员是为这两个模型定义的。要将令牌添加到黑名单,请在后台找到其对应的 OutstandingToken 记录,然后再次使用后台创建指向 OutstandingToken 记录的 BlacklistedToken 记录。
但是,我没有找到任何代码示例,并且我不确定应该如何实现。一个例子将不胜感激。
简单的 JWT 仅将刷新令牌列入黑名单。这可以通过设置来完成:
INSTALLED_APPS = (
...
'rest_framework_simplejwt.token_blacklist',
...
}
Run Code Online (Sandbox Code Playgroud)
然后运行migrate。
因此,我建议,为了注销用户:
从客户端删除刷新和访问令牌。此外,保持访问令牌的过期时间尽可能短。
通过创建 api 端点将刷新令牌列入黑名单。
urls.py
path('/api/logout', views.BlacklistRefreshView.as_view(), name="logout"),
Run Code Online (Sandbox Code Playgroud)
视图.py
from rest_framework_simplejwt.tokens import RefreshToken
class BlacklistRefreshView(APIView):
def post(self, request)
token = RefreshToken(request.data.get('refresh'))
token.blacklist()
return Response("Success")
Run Code Online (Sandbox Code Playgroud)
这将确保刷新令牌不能再次用于生成新令牌(如果有人已获取它)。此外,由于访问令牌的寿命很短,因此希望它很快就会失效。
小智 0
我遇到了同样的错误:
TokenError(_('令牌无效或过期'))
因为将访问令牌传递给:
token = RefreshToken(access_token)
Run Code Online (Sandbox Code Playgroud)
而我应该传递刷新令牌。
| 归档时间: |
|
| 查看次数: |
16394 次 |
| 最近记录: |