0

J'ai un modèle appelé Lead qui représente mon possible future_customer.URL/page sécurisée pour AnonUser pour mettre à jour un champ de modèle - Cadre Django Rest

Afin de mettre à jour un champ booléen appelé is_approved dans ce modèle, je vous envoie un e-mail à l' email ID de plomb le long d'une URL et cette URL vous amène à une page sur mon site où il demande l'approbation.

Comment gérer les autorisations dans Django Rest framework vues? Il n'y a pas utilisateur django associé à Modèle plomb et je ne peux pas utiliser les classes liées à l'authentification.

L'URL masqué ainsi que AllowAny la permission est-elle suffisante?

Répondre

1

Ce qui se passe généralement dans un scénario normal pour la validation des e-mails est qu'ils génèrent un jeton unique pour l'e-mail correspondant. Puis ils quand l'utilisateur clique sur l'email. Il est redirigé vers une page où il peut y avoir un formulaire de soumission qui mène à une page POST ou qui valide directement. La seule sécurité est que l'identifiant unique est juste unique et il y a une chance très rare pour quelqu'un de générer ces ID via la force brute. C'est la seule sécurité. Vous pouvez ajouter une date d'expiration qui rend le lien valide seulement pour quelques jours.

L'e-mail correspondant est associé au même champ et le champ is_approved est mis à jour en conséquence.

Votre modèle et vue devrait ressembler à ceci.

class Lead(models.Model): 
    email = models.EmailField() 
    unique_id = models.CharField(default=uuid.uuid4) 
    is_approved = models.BooleanField(default=False) 

    def get_absolute_url(self): 
     return reverse('lead_verification', kwargs={'unique_id': self.unique_id}) 


class LeadVerificationView(APIView): 

    def post(self, unique_id): 
     lead = Lead.objects.get(unique_id=unique_id) 
     lead.is_approved = True 
     lead.save() 
+0

Bipul, C'est ce que j'ai fini par faire en fait. J'ai regardé le code d'activation_email de Djoser et ils n'ont aucune autre sécurité sauf uuid dans l'url. Merci quand même. – pnhegde

+0

@pnhegde Espérons qu'il a encore répondu à votre question alors. Upvote, acceptez et fermez. :) –