You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Simple JWT导入InvalidAlgorithmError报错求助

问题

使用Python 3.10+最新版Django Simple JWT生成认证令牌时,出现导入错误:

from jwt import InvalidAlgorithmError, InvalidTokenError, algorithms

ImportError: cannot import name 'InvalidAlgorithmError' from 'jwt'

完整错误栈:

ad Request: /api/user/r/
[01/Nov/2022 06:31:45] "POST /api/user/r/ HTTP/1.1" 400 62
Internal Server Error: /api/user/r/
Traceback (most recent call last):
  File "....../env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "....../env/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "....../env/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "....../env/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "....../env/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "....../env/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "....../env/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "....../env/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "....../account/views.py", line 33, in post
    token = get_tokens_for_user(user)
  File "....../account/views.py", line 16, in get_tokens_for_user
    'refresh': str(refresh),
  File "....../env/lib/python3.10/site-packages/rest_framework_simplejwt/tokens.py", line 81, in __str__
    return self.get_token_backend().encode(self.payload)
  File "....../env/lib/python3.10/site-packages/rest_framework_simplejwt/tokens.py", line 204, in get_token_backend
    return self.token_backend
  File "....../env/lib/python3.10/site-packages/rest_framework_simplejwt/tokens.py", line 197, in token_backend
    self._token_backend = import_string(
  File "....../env/lib/python3.10/site-packages/django/utils/module_loading.py", line 30, in import_string
    return cached_import(module_path, class_name)
  File "....../env/lib/python3.10/site-packages/django/utils/module_loading.py", line 15, in cached_import
    module = import_module(module_path)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "....../env/lib/python3.10/site-packages/rest_framework_simplejwt/state.py", line 1, in <module>
    from .backends import TokenBackend
  File "....../env/lib/python3.10/site-packages/rest_framework_simplejwt/backends.py", line 7, in <module>
    from jwt import InvalidAlgorithmError, InvalidTokenError, algorithms
ImportError: cannot import name 'InvalidAlgorithmError' from 'jwt' (....../jwt/__init__.py)
[01/Nov/2022 06:31:52] "POST /api/user/r/ HTTP/1.1" 500 159548

触发错误的代码:

from rest_framework_simplejwt.tokens import RefreshToken

# manual refresh tokens
def get_tokens_for_user(user):
    refresh = RefreshToken.for_user(user)

    return {
        'refresh': str(refresh),
        'access': str(refresh.access_token),
    }

已尝试按官方文档调整settings.py配置,问题仍未解决。询问如何解决该错误,是否需要手动在__init__.py中添加InvalidAlgorithmError,以及相关配置的正确设置方式。

解决方法

这个错误的核心原因是pyjwt版本与djangorestframework-simplejwt版本不兼容:新版本pyjwt中InvalidAlgorithmError的命名或导入路径发生了变化,但旧版simplejwt仍在尝试导入旧名称。

  • 指定兼容的pyjwt版本
    卸载当前pyjwt,安装与simplejwt匹配的版本。例如,对于多数新版本simplejwt,可安装:

    pip uninstall pyjwt
    pip install pyjwt==2.4.0
    

    也可以直接查看djangorestframework-simplejwt的官方依赖说明,安装对应要求的版本。

  • 禁止手动修改jwt包源码
    不要手动修改jwt/__init__.py添加InvalidAlgorithmError,这会破坏第三方库的完整性,后续版本更新时还会引发新问题,绝非根本解决方案。

  • 更新simplejwt到最新版
    确保使用最新版djangorestframework-simplejwt,它已适配新版pyjwt的导入规则:

    pip install --upgrade djangorestframework-simplejwt
    
  • 验证settings.py配置
    确保simplejwt基础配置正确,示例配置如下:

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_simplejwt.authentication.JWTAuthentication',
        ),
    }
    
    from datetime import timedelta
    
    SIMPLE_JWT = {
        'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
        'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
        'ROTATE_REFRESH_TOKENS': False,
        'BLACKLIST_AFTER_ROTATION': False,
        'UPDATE_LAST_LOGIN': False,
    
        'ALGORITHM': 'HS256',
        'SIGNING_KEY': SECRET_KEY,
        'VERIFYING_KEY': None,
        'AUDIENCE': None,
        'ISSUER': None,
        'JWK_URL': None,
        'LEEWAY': 0,
    
        'AUTH_HEADER_TYPES': ('Bearer',),
        'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
        'USER_ID_FIELD': 'id',
        'USER_ID_CLAIM': 'user_id',
        'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
    
        'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
        'TOKEN_TYPE_CLAIM': 'token_type',
        'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',
    
        'JTI_CLAIM': 'jti',
    
        'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
        'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
        'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
    }
    

内容的提问来源于stack exchange,提问作者Rajrup Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:41:27