我正在使用social-app-django(python-social-auth的一部分)为我的Django网站的用户实现Facebook登录。我要求用户必须先在本地用户数据库中找到,然后才能使用Facebook登录。我已经替换了身份验证管道的auth_allowed部分,以执行此检查:
def auth_allowed(backend, details, response, *args, **kwargs):
if not backend.auth_allowed(response, details) or not is_registered_user(response, details):
raise AuthForbidden(backend)
其中is_registered_user()
是一个自定义函数,用于检查用户是否在本地存在。
我的问题是,如果此检查失败并且抛出了AuthForbidden
异常,则不会将用户重定向到登录错误URL。相反,该网站返回500。
错误页面URL在settings.py中配置如下:
LOGIN_ERROR_URL = "/"
我正在使用Django CMS,所以我也尝试实现覆盖SocialAuthExceptionMiddleware
(它应该在标准设置中处理AuthForbidden
异常)的中间件来返回CMS页面而不是来自settings.py的URL但不调用此中间件在这个过程中,据我所知。
有想法该怎么解决这个吗?我错过了一些配置吗?
我想我解决了这个问题:我不小心用了
social.apps.django_app.middleware.SocialAuthExceptionMiddleware
代替
social_django.middleware.SocialAuthExceptionMiddleware
在引用异常处理中间件时。这个错误最有可能是在前一段时间从django-social-auth
升级到python-social-auth
/ social-app-django
时引入的。