Tôi là người mới đến vũ trụ python/Django và vừa mới bắt đầu một dự án lớn mà tôi rất vui mừng. Tôi cần có người dùng đăng nhập thông qua Facebook và ứng dụng của tôi có luồng người dùng thực sự cụ thể. Tôi đã thiết lập django-allauth và mọi thứ hoạt động như tôi cần. Tôi đã ghi đè LOGIN_REDIRECT_URL để người dùng của tôi truy cập trang tôi muốn khi họ đăng nhập.Thay đổi django-allauth render_authentication_error behavior
NHƯNG. Khi người dùng mở hộp thoại đăng nhập Facebook và sau đó đóng nó mà không cần đăng nhập, mẫu authentication_error.html
được hiển thị bởi allauth.socialaccount.helpers.render_authentication_error
và đây không phải là hành vi mà tôi muốn. Tôi muốn người dùng chỉ cần được chuyển hướng đến trang đăng nhập.
Có, tôi biết tôi có thể chỉ cần ghi đè mẫu bằng cách đặt nó trong số TEMPLATE_DIRS
của mình, nhưng sau đó url sẽ không giống nhau.
Tôi đã đi đến kết luận tôi cần một phần mềm trung gian để chặn phản hồi đối với yêu cầu 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
Nhưng tôi không chắc chắn về hiệu quả của giải pháp của tôi cũng như sự thiếu thốn (tôi đã nghĩ ra từ đó) của nó. Có bất cứ điều gì khác tôi có thể làm gì để thay đổi hành vi mặc định django-allauth mà không sử dụng một middleware hoặc một tín hiệu?
Cảm ơn!
Những gì tôi có nghĩa là URL sẽ không được giống như gốc url nơi tôi muốn chuyển hướng trên lỗi đăng nhập. Dù sao, tôi đã chọn chỉ đơn giản là sử dụng phần mềm trung gian và chuyển hướng các yêu cầu GET đến/accounts/* tới url gốc –
Thật tuyệt, bạn đã tìm được giải pháp. –