Django REST Framework TokenAuthentication在Postman可用但浏览器可浏览API认证失败
DRF可浏览API使用TokenAuthentication的解决方案
可以在DRF新版本(3.x及以后)的可浏览API中使用TokenAuthentication,你的问题大概率是配置不完整或token传递方式不符合要求,以下是排查和解决步骤:
1. 确认核心配置完整性
- 确保
INSTALLED_APPS中包含rest_framework.authtoken,并执行过python manage.py migrate生成token存储表:# settings.py INSTALLED_APPS = [ # 其他应用 'rest_framework', 'rest_framework.authtoken', ] - 确认
DEFAULT_AUTHENTICATION_CLASSES已正确配置:REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', # 可选:添加SessionAuthentication,可通过页面"Login"按钮登录调试,无需手动传token 'rest_framework.authentication.SessionAuthentication', ], # 若接口需要登录权限,配置对应权限类 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] }
2. 可浏览API中正确传递Token的方式
- 请求头方式:必须严格遵循格式
Authorization: Token <你的token字符串>,注意Token与token值之间有空格,这是最容易出错的点。 - 查询参数方式:在URL后拼接
?token=<你的token字符串>,DRF的TokenAuthentication默认会识别该参数。 - 若同时配置了SessionAuthentication,点击可浏览API页面顶部的"Login"按钮,用用户账号密码登录后,会话会自动保持认证状态,无需手动传token。
3. 排查验证步骤
- 打开浏览器开发者工具(F12),查看请求的Network面板,确认
Authorization请求头是否正确发送,未被插件或中间件拦截。 - 查看DRF的请求日志,检查认证环节是否识别到token、是否验证通过。
- 通过Django Shell验证用户token有效性:
python manage.py shell from rest_framework.authtoken.models import Token # 替换为你的用户名 token = Token.objects.get(user__username='your_username') print(token.key)
内容的提问来源于stack exchange,提问作者werberger
相关产品推荐
相关产品推荐

