Sono un nuovo arrivato nell'universo Python/Django e ho appena iniziato un enorme progetto di cui sono piuttosto entusiasta. Devo far accedere i miei utenti tramite Facebook e la mia app ha un flusso di utenti davvero specifico. Ho impostato django-allauth e tutto funziona come avevo bisogno. Ho annullato LOGIN_REDIRECT_URL in modo che i miei utenti arrivino alla pagina desiderata quando accedono.Cambiare il comportamento di django-allauth render_authentication_error
MA. Quando l'utente apre la finestra di dialogo di login di Facebook e poi la chiude senza effettuare il login, il modello authentication_error.html
viene sottoposto a rendering da allauth.socialaccount.helpers.render_authentication_error
e questo non è il comportamento che desidero. Voglio che l'utente venga semplicemente reindirizzato alla pagina di accesso.
Sì, so che potrei semplicemente sovrascrivere il modello inserendolo nel mio TEMPLATE_DIRS
, ma l'url non sarebbe lo stesso.
Sono giunto alla conclusione. Avevo bisogno di un middleware per intercettare la risposta alla richiesta 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
Ma io non sono sicuro circa l'efficienza della mia soluzione, né la pythonesquitude (I Juste si avvicinò con questa parola) di esso. C'è qualcos'altro che potrei fare per cambiare quel comportamento predefinito di django-allauth senza usare un middleware o un segnale?
Grazie!
Quello che volevo dire è l'URL non sarebbe lo stesso come la radice url dove voglio reindirizzare l'errore di accesso. Comunque, ho scelto di usare semplicemente un middleware e reindirizzare le richieste GET a/accounts/* per l'url di root –
Cool, felice che tu abbia trovato una soluzione. –