DRF-social-oauth2请求token报invalid_client错误求助
以下是几个排查和解决的关键点:
去掉请求参数里的尖括号
你的curl命令里client_id、client_secret等参数被<>包裹,这会导致服务器无法识别正确的凭证。直接移除尖括号,用原始字符串发送请求:curl -X POST -d "client_id=nBezU5O1OJT74Vt7bItsbdTgoUqcY4ytJuUcpibO&client_secret=pbkdf2_sha256$390000$mSUCDwLkV3iY4fYjAgEEMq$91mdrFYgz3mj5mayJxT6wcjPFLpMS1Hc3Z4TNl7PySc=&grant_type=password&username=admin@gmail.com&password=admin" http://localhost:8000/auth/token确认Application配置正确
登录Django后台,检查创建的Application对象:- 类型必须选
confidential(密码授权模式要求用这个类型) - 重定向URI可以留空,或者填个测试用的地址比如
http://localhost:8000 - 核对client_id和client_secret和你请求里的完全一致,别带多余空格或特殊字符
- 类型必须选
适配自定义User模型的配置
在settings.py里添加以下配置,让oauth2服务识别你的CustomUser:SOCIAL_AUTH_USER_MODEL = '你的应用名.CustomUser' OAUTH2_PROVIDER = { 'USER_MODEL': '你的应用名.CustomUser', # 保留你原来的其他oauth2配置 }把
你的应用名替换成CustomUser所在的app名称验证用户状态
确保测试用的admin@gmail.com是激活状态,且密码正确。可以用Django shell验证:from 你的应用名.models import CustomUser user = CustomUser.objects.get(email='admin@gmail.com') print(user.is_active) # 应该返回True print(user.check_password('admin')) # 应该返回True检查路由配置
确认项目urls.py里正确引入了drf-social-oauth2的路由:from django.urls import path, include urlpatterns = [ # 其他路由... path('auth/', include('drf_social_oauth2.urls', namespace='drf')), ]
内容的提问来源于stack exchange,提问作者Aaron Michael
相关产品推荐
相关产品推荐

