DRF使用Simple JWT时访问受限URL提示「未提供身份验证凭据」问题
搞定Simple JWT「Authentication credentials were not provided」错误
嘿,我来帮你排查这个头疼的认证问题!你已经配置了JWT认证和登录权限,但请求还是提示未提供凭据,大概率是令牌的传递方式不对,或者令牌本身有问题,下面一步步来解决:
最常见的问题:令牌传递格式错了
Simple JWT默认要求令牌必须放在Authorization请求头里,格式是严格的:Bearer <你的access令牌>,注意Bearer后面一定要加个空格!
- Postman操作示例:
切换到「Headers」标签,添加一个键为Authorization的头,值填Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...(把后面的字符串换成你实际拿到的access token) - Curl命令示例:
curl -H "Authorization: Bearer 你的_access_token" http://你的API域名/currency/目标slug/
先确认你的令牌是有效的
别着急发请求,先确保手里的令牌是活的:
- 先通过Simple JWT自带的
token_obtain_pair接口拿新令牌:
返回结果里的curl -X POST http://你的API域名/api/token/ -d "username=你的用户名&password=你的密码"access字段才是你要用来发请求的令牌,refresh是用来刷新令牌的,不能直接用在请求头里! - 可以用
token_verify接口验证令牌是否有效:
如果返回200,说明令牌没问题;如果报错,那就是令牌过期或者无效,重新拿一个就行。curl -X POST http://你的API域名/api/token/verify/ -d "token=你的_access_token"
检查你的配置有没有遗漏
你的views.py和settings.py代码看起来是对的,但可以再确认这几点:
- 有没有装对包:
pip install djangorestframework-simplejwt,别漏了! INSTALLED_APPS里有没有加rest_framework和rest_framework_simplejwt?虽然认证类配置了,但有时候没加app会有隐性问题- 视图的
permission_classes是不是真的设成了[IsAuthenticated]?你贴的代码是对的,但可以再检查下拼写有没有错
特殊情况:用Cookie存令牌的话要处理CSRF
如果你配置了JWT_AUTH_COOKIE把令牌存在Cookie里,那Postman请求时还得带CSRF令牌,但API请求一般用Authorization头的方式更省心,建议优先用Header传递令牌。
快速测试流程
- 用
token_obtain_pair拿一个全新的access token - 在Postman里严格按照
Bearer <token>格式加Authorization头 - 发请求到你的
CurrencyDetailAPIView接口
如果还是不行,可以看看DRF的日志,里面会有更详细的错误信息——比如是令牌解析失败,还是请求头根本没被识别到。
内容的提问来源于stack exchange,提问作者Kurosh Ghanizadeh
相关产品推荐
相关产品推荐

