【发布时间】:2015-02-09 03:01:17
【问题描述】:
我是 python/Django 世界的新手,刚刚开始了一个令我非常兴奋的大型项目。我需要让我的用户通过 Facebook 登录,并且我的应用程序有一个非常具体的用户流程。我已经设置了 django-allauth,一切都按我的需要运行。我已经覆盖了 LOGIN_REDIRECT_URL,以便我的用户在登录时登陆我想要的页面。
但是。当用户打开 Facebook 登录对话框然后在不登录的情况下将其关闭时,authentication_error.html 模板将由allauth.socialaccount.helpers.render_authentication_error 呈现,这不是我想要的行为。我希望用户简单地被重定向到登录页面。
是的,我知道我可以通过将模板放在我的 TEMPLATE_DIRS 中来简单地覆盖模板,但是 URL 将不一样。
我得出的结论是,我需要一个中间件来拦截对 http 请求的响应。
from django.shortcuts import redirect
class Middleware():
"""
A middleware to override allauth user flow
"""
def __init__(self):
self.url_to_check = "/accounts/facebook/login/token/"
def process_response(self, request, response):
"""
In case of failed faceboook login
"""
if request.path == self.url_to_check and\
not request.user.is_authenticated():
return redirect('/')
return response
但我不确定我的解决方案的效率,也不确定它的 pythonesquitude(我只是想出了那个词)。在不使用中间件或信号的情况下,我还能做些什么来改变默认的 django-allauth 行为?
谢谢!
【问题讨论】:
标签: python django django-allauth