Je travaille sur une grande application Django, dont la grande majorité nécessite une connexion pour y accéder. Cela signifie que tout au long de notre application, nous avons saupoudré:
@login_required
def view(...):
C'est très bien, et cela fonctionne très bien tant que nous nous souvenons de l'ajouter partout ! Malheureusement, parfois, nous oublions, et l'échec n'est souvent pas très évident. Si le seul lien vers une vue se trouve sur une page @login_required, vous ne remarquerez probablement pas que vous pouvez réellement accéder à cette vue sans vous connecter. Mais les méchants peuvent remarquer, ce qui pose problème.
Mon idée était d'inverser le système. Au lieu d'avoir à taper @login_required partout, j'aurais plutôt quelque chose comme:
@public
def public_view(...):
Juste pour les trucs publics. J'ai essayé de l'implémenter avec un middleware et je n'arrivais pas à le faire fonctionner. Tout ce que j'ai essayé a mal interagi avec les autres intergiciels que nous utilisons, je pense. Ensuite, j'ai essayé d'écrire quelque chose pour parcourir les modèles d'URL pour vérifier que tout ce qui n'est pas @public était marqué @login_required - au moins, nous aurions une erreur rapide si nous oublions quelque chose. Mais ensuite, je ne savais pas comment savoir si @login_required avait été appliqué à une vue ...
Alors, quelle est la bonne façon de faire cela? Merci pour l'aide!