启用HTTPS后AllAuth+Google OAuth 2.0出现redirect_uri_mismatch错误
解决AllAuth + Google OAuth 2.0的redirect_uri_mismatch错误(HTTPS环境)
以下是针对该问题的具体排查和解决步骤:
核对Google Cloud Console的回调地址细节
先确认你添加的HTTPS回调地址和实际请求的地址完全一致:- 检查末尾的斜杠:如果AllAuth实际发起的请求里
redirect_uri没有末尾斜杠,而你在Console里加了,就会不匹配;反之同理。 - 确认是添加到Web应用类型的OAuth客户端ID下,别选错成桌面应用、Android或iOS客户端,不同类型的客户端回调地址是分开配置的。
- 检查该客户端ID是否处于启用状态,有没有被误禁用。
- 检查末尾的斜杠:如果AllAuth实际发起的请求里
检查AllAuth与Django的配置
- 在
settings.py的SOCIALACCOUNT_PROVIDERS配置中,查看Google部分的redirect_uri是否明确设置为https://myweb.com/accounts/google/login/callback/;如果依赖自动生成,要确保SITE_ID对应的站点域名是HTTPS的(在Django admin的站点设置里核对)。 - 确认
ALLOWED_HOSTS包含myweb.com,避免Django因域名不允许而返回异常,间接导致回调地址错误。 - 若开启了
SECURE_SSL_REDIRECT,确保所有HTTP请求都正确重定向到HTTPS,防止授权请求从HTTP发起导致回调地址不匹配。
- 在
清除缓存与残留会话
- 执行
python manage.py clearcache清除Django的缓存,防止旧的HTTP回调地址被缓存复用。 - 让测试用户清除浏览器的Cookie和缓存,尤其是Google相关的会话数据,避免旧的授权会话残留导致地址不匹配。
- 执行
排查反向代理/服务器配置
如果你的应用用了Nginx、Apache这类反向代理,必须确保代理传递了正确的HTTPS标识:- 以Nginx为例,在代理配置中添加:
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; - 在Django的
settings.py中开启:SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
这样Django才能识别到当前是HTTPS环境,AllAuth生成的回调地址才会是HTTPS的。
- 以Nginx为例,在代理配置中添加:
实际验证请求中的redirect_uri参数
打开浏览器开发者工具的Network面板,发起Google授权请求,查看请求URL中的redirect_uri参数值,把它和Cloud Console里的地址逐字符对比,找出差异后调整配置即可。
内容的提问来源于stack exchange,提问作者Alvar
相关产品推荐
相关产品推荐

