未提供身份验证凭据 django-rest-auth
Authentication credentials were not provided django-rest-auth
我有一个应用程序,我实现了 django restframework 和 django reat-auth 以及 jango 框架 jwt。我按照说明进行操作,在浏览器中一切正常。我现在决定测试邮递员中的连接并尝试获取端点为 /rest-auth/user
的登录用户的详细信息,但我收到以下错误
{
"detail": "Authentication credentials were not provided."
}
并且我决定复制返回的Token并将其放入用户url的header中作为
"Authorization": "Token ahagjbeghq7hbcvgqhvwqu08hevug.jwhhwiiwhw",
"Content-Type": "application/json; charset=utf-8"
用返回的令牌修改 header 后,我希望它显示用户的详细信息,但我仍然得到
{
"detail": "Authentication credentials were not provided."
}
但是我可以通过restframework jwt
提供的url验证token是否正确
/api-token-verify
返回令牌值。这是我的 django rest 身份验证 类
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
}
对于 jwt 令牌,您应该在 Authorization
header 中使用 JWT
而不是 Token
:
"Authorization: JWT <your_token>"
正如@neverwalkaloner 已经提到的,JWT
关键字应该是 Postman header 部分中授权的值。 Docs
此外,如果您不希望 JWT 作为您的令牌的关键字,您可以从您的设置中自定义它:使用以下键:JWT_AUTH_HEADER_PREFIX
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': settings.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': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'Bearer', #this most commonly accepted way
'JWT_AUTH_COOKIE': None,
}
我有一个应用程序,我实现了 django restframework 和 django reat-auth 以及 jango 框架 jwt。我按照说明进行操作,在浏览器中一切正常。我现在决定测试邮递员中的连接并尝试获取端点为 /rest-auth/user
的登录用户的详细信息,但我收到以下错误
{
"detail": "Authentication credentials were not provided."
}
并且我决定复制返回的Token并将其放入用户url的header中作为
"Authorization": "Token ahagjbeghq7hbcvgqhvwqu08hevug.jwhhwiiwhw",
"Content-Type": "application/json; charset=utf-8"
用返回的令牌修改 header 后,我希望它显示用户的详细信息,但我仍然得到
{
"detail": "Authentication credentials were not provided."
}
但是我可以通过restframework jwt
提供的url验证token是否正确/api-token-verify
返回令牌值。这是我的 django rest 身份验证 类
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
}
对于 jwt 令牌,您应该在 Authorization
header 中使用 JWT
而不是 Token
:
"Authorization: JWT <your_token>"
正如@neverwalkaloner 已经提到的,JWT
关键字应该是 Postman header 部分中授权的值。 Docs
此外,如果您不希望 JWT 作为您的令牌的关键字,您可以从您的设置中自定义它:使用以下键:JWT_AUTH_HEADER_PREFIX
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': settings.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': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'Bearer', #this most commonly accepted way
'JWT_AUTH_COOKIE': None,
}