如何从Djoser的/users/me端点获取用户数据,报403错误如何解决?
排查和解决步骤:
- 首先检查
REST_FRAMEWORK全局配置中的认证类
你当前贴出的配置只包含了DJOSER项,绝大多数403问题都是遗漏了这部分配置,需要在settings.py中补充对应认证后端:REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( # 如果你用JWT认证,保留这行,需要提前安装djangorestframework-simplejwt 'rest_framework_simplejwt.authentication.JWTAuthentication', # 如果你用Django默认Token认证,保留这行 # 'rest_framework.authentication.TokenAuthentication', ), } - 确认账户已激活
你的DJOSER配置开启了SEND_ACTIVATION_EMAIL,用户注册完成后默认is_active状态为False,未完成邮箱激活的账户请求所有受保护接口都会返回403。你可以先在Django后台对应用户表中把目标用户的is_active字段改为True测试,验证是激活问题后再调整邮件发送流程即可。 - 确认请求头格式和令牌正确性
- 认证前缀要和你用的认证类严格对应:JWT认证前缀为
Bearer,默认Token认证前缀为Token,不需要用JWT作为前缀 - 前缀和令牌中间必须有一个半角空格,不要额外加引号、换行等符号
- 注意不要拿refresh token请求接口,必须使用接口返回的access token
- 认证前缀要和你用的认证类严格对应:JWT认证前缀为
- 检查权限配置
确认没有全局覆盖REST_FRAMEWORK的DEFAULT_PERMISSION_CLASSES为非登录即可访问的规则,DJOSER默认的/users/me/接口权限为isAuthenticated,没有自定义修改PERMISSIONS项的情况下默认配置是正确的。 - 测试示例(以JWT为例):
curl -H "Authorization: Bearer 你获取到的access_token" http://你的服务地址/auth/users/me/
内容的提问来源于stack exchange,提问作者C-Bizz
相关产品推荐
相关产品推荐

