使用django-oauth实现Django Google登录注册时出现redirect_uri_mismatch错误
问题原因
redirect_uri_mismatch 报错的核心逻辑是谷歌校验时认为请求中的回调地址和后台配置的地址完全不相等,哪怕只有一个字符的差异都会触发报错,你遇到的情况大概率是以下几种原因:
- 地址内容不匹配:你后台配置的是
localhost开头的地址,但实际请求的是127.0.0.1开头的地址,谷歌OAuth会把这两个视为完全不同的地址;或者配置的地址缺少末尾的/、协议不一致。 - 配置未生效:谷歌云后台修改授权回调地址后,需要3-5分钟的同步时间,刚改完就测试会触发报错。
- Django配置异常:Django侧的配置导致生成的回调地址不符合预期。
解决方法
- 完全复制报错信息里的回调地址
http://127.0.0.1:8000/accounts/google/login/callback/,粘贴到谷歌云凭证的「授权重定向URI」列表中,确保没有任何字符差异,包括末尾的斜杠、http协议、IP地址不要替换为localhost,保存配置。 - 保存后等待5分钟再测试,避免配置未同步导致的报错。
- 检查Django项目的
settings.py配置:- 确保
ALLOWED_HOSTS列表中包含127.0.0.1 - 如果你使用django-allauth实现OAuth,确保
INSTALLED_APPS中添加了allauth.socialaccount.providers.google,且SITE_ID配置正确 - 如果你本地有反向代理配置,添加以下参数确保Django能识别正确的协议和域名:
USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') - 确保
- 本地启动项目时统一使用
python manage.py runserver 127.0.0.1:8000命令,避免访问时自动跳转到localhost导致地址不匹配。
内容的提问来源于stack exchange,提问作者giaggi
相关产品推荐
相关产品推荐

