【问题标题】:restframework-jwt not working with manual model classrest framework-jwt 不适用于手动模型类
【发布时间】:2019-05-09 19:40:42
【问题描述】:

我对 django restframework-jwt 只有初学者级别的想法。当我尝试使用我的自定义模型类进行身份验证时,它显示

“non_field_errors”:[ “无法使用提供的凭据登录。” ]

但我可以使用“auth_user”表数据生成令牌

model.py 包含用户类和 user_manager

settings.py

INSTALLED_APPS = [
'rest_framework',
'rest_framework_jwt',
'rest_framework.authtoken', 
 ]

AUTH_USER_MODEL = '**app_name**.Users'
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework.authentication.SessionAuthentication',
)
}

JWT_AUTH = {

'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=3000),
'JWT_AUTH_HEADER_PREFIX': 'Bearer',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',

 }

【问题讨论】:

    标签: django django-rest-framework jwt


    【解决方案1】:

    您可以像这样更改您的 settings.py 文件:

    还在 INSTALLED_APPS 中添加新应用并添加 AUTH_USER_MODEL

    INSTALLED_APPS = [
    'rest_framework',
    'rest_framework_jwt',
    'app_name'
     ]
    
    AUTH_USER_MODEL = '**app_name**.Users'
    
    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': (        
            'rest_framework.permissions.AllowAny',
        ),
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        ),
    }
    
    
    JWT_AUTH = {
        'JWT_ENCODE_HANDLER':
        'rest_framework_jwt.utils.jwt_encode_handler',
    
        'JWT_DECODE_HANDLER':
        'rest_framework_jwt.utils.jwt_decode_handler',
    
        'JWT_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_payload_handler',
    
        'JWT_PAYLOAD_GET_USER_ID_HANDLER':
        'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
    
        'JWT_RESPONSE_PAYLOAD_HANDLER':
        'rest_framework_jwt.utils.jwt_response_payload_handler',
    
        'JWT_SECRET_KEY': SECRET_KEY,
        'JWT_GET_USER_SECRET_KEY': None,
        'JWT_PUBLIC_KEY': None,
        'JWT_PRIVATE_KEY': None,
        'JWT_ALGORITHM': 'HS256',
        'JWT_VERIFY': True,
        'JWT_VERIFY_EXPIRATION': True,
        'JWT_LEEWAY': 0,
        'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
        'JWT_AUDIENCE': None,
        'JWT_ISSUER': None,
    
        'JWT_ALLOW_REFRESH': False,
        'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
    
        'JWT_AUTH_HEADER_PREFIX': 'JWT',
        'JWT_AUTH_COOKIE': None,
    
    }
    

    【讨论】:

    • 您是否进行了迁移操作?
    • 是的。由于它的长度站点阻塞,我无法在此处上传我的模型类。包含Users(AbstractBaseUser,PermissionsMixin)和类UserManager(BaseUserManager):会不会出错?
    • 还有迁移操作
    • 发送了相同的信息
    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2018-09-16
    • 2018-03-06
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多