【问题标题】:Is the JWT token stored in the same table as the DRF token?JWT 令牌是否与 DRF 令牌存储在同一个表中?
【发布时间】:2016-10-25 18:15:29
【问题描述】:

我希望有人能解决我对 django_rest_authdjango_rest_framework 中 JWT 和常规令牌身份验证的困惑。

我将 django_rest_auth 与 JWT (REST_USE_JWT = True) 一起使用。我正在使用rest_auth.registration 视图和rest_auth 视图并将我的默认身份验证类设置为'rest_framework_jwt.authentication.JSONWebTokenAuthentication'

我已经包含了来自 rest_auth 的 url,并设置了以下 urlurl(r'^api-token-auth/', obtain_jwt_token),来自 rest_framework_jwt 文档。

当我注册一个新用户时,我希望运行来自 rest_auth RegisterView 的以下代码:

if getattr(settings, 'REST_USE_JWT', False):
    self.token = jwt_encode(self.user)

但是在 Django Admin 中,我看到有一个 Auth Token 表,“Tokens”,如果我使用了 Django 内置的 Token Authentication,那么它带有一个看起来像普通令牌的令牌。实际上,当我转到 /rest-auth/login 端点时,它会返回相同的令牌,例如{"key":"6b705cbab083833c38414d4c6e4970c0abbb0c9f"}。但是,当我访问该用户的 api-token-auth/ 端点时,我得到了 JWT 令牌:{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InJvYmVydEByb2JlcnRjaHUuY28udWsiLCJleHAiOjE0NjY2ODI5MjcsInVzZXJfaWQiOjIsInVzZXJuYW1lIjoicm9iZXJ0QHJvYmVydGNodS5jby51ayJ9.IvJIQBY95TrQp3V483GVdpV0fQKedMk9hWEFytMRidU"}

这些密钥和令牌可以互换吗?我可以为同一个用户使用两个令牌吗?当然,我应该只有一个令牌选项来访问受保护的端点吗?

谢谢。

【问题讨论】:

    标签: django-rest-framework django-rest-auth


    【解决方案1】:

    herehere。 JWT 不应该存储在任何地方,这是 drf 令牌的好处之一——您不会在每个请求上都访问数据库。此外,如果您只想使用 JWT 进行身份验证,您应该摆脱用于令牌身份验证的端点(drf 附带的端点)。

    【讨论】:

    • 谢谢,我想我的后续问题是,当我将 JWT 标志设置为 True 时,为什么会在 django_rest_auth 中创建令牌?还是我的设置不正确?
    • 据我记得你必须从你的settings.INSTALLED_APPS 中删除rest_framework.authtoken,如果你在切换到 JWT 之前使用了来自 drf 的 ObtainAuthToken 视图,它只会调用 Token.objects .get_or_create(user=user) 并且令牌将保留在数据库中...
    • 也看这里:getblimp.github.io/django-rest-framework-jwt 例如设置 - 您可以设置多个身份验证类。如果您只想要 JWT 身份验证,请仅将其保留在 DEFAULT_AUTHENTICATION_CLASSES
    • 谢谢,这帮助我意识到我通过 pip 安装的最新 django_rest_auth 库在撰写本文时为 0.7.0,尚未实现 JWT,但我正在查看最新源在 github 上假设它是,因此登录端点仍在设置 DRF 令牌,无论 JWT 设置标志的状态如何。
    猜你喜欢
    • 2019-02-01
    • 2018-03-04
    • 2021-09-26
    • 2018-12-07
    • 2019-05-06
    • 1970-01-01
    • 2021-02-11
    • 2019-12-08
    • 2020-05-27
    相关资源
    最近更新 更多