Django allauth报错:is_safe_url()收到意外关键字参数'allowed_hosts'
解决Django allauth Facebook登录时的TypeError: is_safe_url() got an unexpected keyword argument 'allowed_hosts'
这个问题我之前配置Django社交登录时也踩过坑,核心原因是Django版本与django-allauth版本不兼容。具体来说:
Django 4.0+ 对django.utils.http.is_safe_url()函数的参数做了修改,移除了allowed_hosts这个关键字参数;而旧版本的django-allauth(比如0.49.x及更早)仍然在调用这个函数时传递allowed_hosts,从而触发类型错误。
下面是具体的解决步骤:
1. 先确认当前版本
首先检查你使用的Django和django-allauth版本,执行以下命令:
pip list | grep -E "Django|django-allauth"
如果你的Django版本是4.0+,但django-allauth版本低于0.50.0,那就是版本不匹配的问题。
2. 升级django-allauth到兼容版本
这是最直接的解决方案,执行升级命令:
pip install --upgrade django-allauth
升级完成后,重启你的Django服务器,再尝试Facebook登录,应该就能解决这个错误。
3. 额外检查(可选)
如果升级后仍然有问题,可以确认以下配置是否正确:
- 确保
settings.py中的ALLOWED_HOSTS包含localhost(比如ALLOWED_HOSTS = ['localhost', '127.0.0.1']) - 检查
SOCIALACCOUNT_PROVIDERS里的Facebook配置是否正确,比如APP ID、SECRET是否填写无误,回调URL是否和Facebook开发者平台的设置一致
内容的提问来源于stack exchange,提问作者swdev
相关产品推荐
相关产品推荐

