使用Django social auth做第三方登录报Error 401: invalid_client如何解决
401 invalid_client 报错排查步骤
这个报错核心是OAuth服务端没有匹配到你请求里携带的客户端标识,按以下顺序核对配置即可:
谷歌登录配置核对
- 确认Django
settings.py中填写的SOCIAL_AUTH_GOOGLE_OAUTH2_KEY和谷歌云控制台「凭据」页面的客户端ID完全一致,需完整带上.apps.googleusercontent.com后缀,不要有多余空格、换行符 - 若当前应用是「测试」发布状态,需确认尝试登录的谷歌账号已经被添加到「OAuth 同意屏幕」的测试用户列表中;如果要对外开放使用,需将发布状态切换为「正式上线」
- 核对谷歌云控制台「已授权的重定向URI」和Django回调地址完全匹配:本地测试需填写
http://localhost:8000/complete/google-oauth2/,注意http/https协议、域名、端口、路径、末尾斜杠都要完全对应,不能有差异
Facebook登录配置核对
- 确认
settings.py中SOCIAL_AUTH_FACEBOOK_KEY和Facebook开发者后台的「应用编号」完全一致,SOCIAL_AUTH_FACEBOOK_SECRET和「应用密钥」匹配,不要出现两个配置项写反的情况 - 若应用处于「开发模式」,仅已添加的测试账号可登录,正式上线需先完成平台审核切换为上线状态
- 核对Facebook后台OAuth设置里的「有效OAuth跳转URI」和Django回调地址完全匹配,本地测试需填写
http://localhost:8000/complete/facebook/
Django端通用核对项
- 确认配置中已经正确注册认证后端,示例配置如下:
SOCIAL_AUTH_AUTHENTICATION_BACKENDS = ( 'social_core.backends.google.GoogleOAuth2', 'social_core.backends.facebook.FacebookOAuth2', 'django.contrib.auth.backends.ModelBackend', )
- 如果你通过环境变量存储密钥/ID,可直接打印对应变量值,确认加载的内容和控制台复制的凭证完全一致,避免环境变量读取错误
相关截图


内容的提问来源于stack exchange,提问作者Abinash Karki
相关产品推荐
相关产品推荐

