Django魔法链接登录报错:Authentication credentials were not provided
1. 检查视图权限配置
- 确认生成魔法链接的
UserAuthView是否误加了登录权限限制,比如@login_required装饰器,或者DRF中设置了IsAuthenticated权限类。魔法链接生成接口应该允许匿名访问,需改为AllowAny:from rest_framework.permissions import AllowAny class UserAuthView(APIView): permission_classes = [AllowAny] # 剩余业务代码
2. 校验URL路由匹配逻辑
- 检查
urls.py中/v1/magiclink是否正确关联到UserAuthView,避免误指向带权限校验的其他视图。 - 排查是否有优先级更高的路由(比如
/v1/前缀的全局路由)提前匹配请求,并附加了权限拦截规则。
3. 自定义用户模型的认证逻辑检查
- 如果自定义用户模型重写了
authenticate等认证方法,排查是否存在逻辑错误,导致匿名请求被错误判定为未授权。 - 确认魔法链接生成接口的业务逻辑中,没有强制执行用户身份认证的步骤。
4. 排查中间件拦截影响
- 检查项目中间件配置,是否存在自定义中间件在请求到达视图前就进行了权限校验,拦截了匿名请求。
- 比如是否有中间件强制要求所有请求携带认证令牌,而魔法链接生成接口不需要令牌验证。
5. 请求方式与参数校验
- 确认请求方式符合视图要求:比如视图仅支持
POST请求,但实际用了GET请求,部分场景下会被权限逻辑误判为未授权(通常是405,但也可能返回401)。 - 检查请求头是否携带了无效的认证信息(比如错误的Token),导致后端认证失败返回401。
6. 调试视图执行流程
- 在
UserAuthView的请求处理方法开头添加日志,确认请求是否到达视图层:import logging logger = logging.getLogger(__name__) class UserAuthView(APIView): def post(self, request): logger.info("魔法链接生成接口接收到请求") # 剩余业务代码
如果日志未打印,说明请求在视图前就被拦截,需回到路由、中间层排查。
内容的提问来源于stack exchange,提问作者Adam Flutter
相关产品推荐
相关产品推荐

