【问题标题】:How to auth using JWTTokenUserAuthentication without Database如何在没有数据库的情况下使用 JWTTokenUserAuthentication 进行身份验证
【发布时间】:2019-10-01 06:08:24
【问题描述】:

天哪!

应用部门:

djangorestframework-simplejwt==4.3.0, djangorestframework==3.10.3

我正在尝试使用JWTTokenUserAuthentication 验证User,而不使用共享SECRET_KEY 的数据库。

在我的设置中:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTTokenUserAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': datetime.timedelta(minutes=120),
    'REFRESH_TOKEN_LIFETIME': datetime.timedelta(hours=12),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': SECRET_KEY,
    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',

    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',

    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': datetime.timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': datetime.timedelta(days=1),
}

对于我使用rest_framework_simplejwt.views.TokenObtainPairView 的视图。 在我的应用程序的网址中:

urlpatterns = [
    path('test-token/', TokenObtainPairView.as_view(),
         name='token_obtain_pair')
]

所以,我正在发出发布请求,并为其提供不记名令牌和凭据,如 usernamepassword。但我收到消息:

{
    "detail": "No active account found with the given credentials"
}

我应该怎么做才能正确认证?

【问题讨论】:

    标签: python django django-rest-framework django-rest-framework-simplejwt


    【解决方案1】:
    1. 创建一个超级用户,然后创建一些虚拟用户,如果没有完成
    2. 进行迁移。
    3. 创建一个视图及其对应的 URL。
    4. 在 Postman 中,使用您的 simplejwt 令牌 API 以及用户名和密码来获取令牌。
    5. 使用您获得的访问令牌调用您在步骤 3 中创建的 api。

    我可以指导整个过程,但这样你就不会学到任何有价值的东西。我也是一个苦苦挣扎的新手和资深的 VB.net/Visual Basic 开发人员,但我很擅长学习 django 之类的新东西...... 撸起袖子,伙计

    【讨论】:

    • 您提出使用用户建模,但我要求使用无状态用户。无论如何,我已经找到了答案。现在,我可以验证无状态用户了
    • @catscoolzhyk stateless 有点用词不当。所有身份验证过程都需要某种小的“状态”来在某些时候存储令牌等。不过,我很高兴您能实现您的目标。
    猜你喜欢
    • 2016-08-02
    • 2018-10-26
    • 2018-11-09
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2020-01-12
    • 2016-04-07
    相关资源
    最近更新 更多