2017-01-13 1 views
0

views.pyDjango: csrf_exempt ne fonctionne pas lorsque d'autres serveurs envoient une requête?

class OrderPayCheckView(View): 

    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return super(OrderPayCheckView, self).dispatch(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     return redirect(reverse("home")) 

J'utilisé le service 3ème partie (je suis client) et il envoie en quelque sorte Notification request(POST)-OrderPayCheckView.

Depuis ce POST request n'est pas de mon application, je pensais que cette vue devrait être décorée avec csrf_exempt de sorte qu'il ne nécessite plus csrf token.

Lorsque j'ai testé avec POSTMAN cela fonctionne très bien: il montre la page de modèle redirigé en tant que corps de la réponse.

Toutefois, lorsque ce service 3ème partie (serveur) a essayé d'envoyer POST demande à ce point de vue, il montre une erreur d'authentification CSRF-jeton comme celui-ci:

(Comme les erreurs sont en coréen, je traduis)

REQUEST HTTP BODY : imp_uid=imp_1234567890&merchant_uid=merchant_1234567890&status=ready 
REQUEST HTTP STATUS : 403 
REQUEST HTTP BODY : 
<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
     <meta name="robots" content="NONE,NOARCHIVE"> 
     <title>403 Forbidden</title> 
    </head> 
    <body> 
     <div id="summary"> 
      <h1>Forbidden <span>(403)</span></h1> 
      <p> CSRF authentication failed. </p> 
      <p> The reason this message shown up is that this https site require "reference header" from your browser, but didn't receive anything abuout it. This header is required for security.</p> 
     </div> 
    </body> 
</html> 

Qu'est-ce qui ne va pas? Est-ce que l'expéditeur doit ajouter reference header à sa demande?

Répondre

-1

Edit: Ce n'est pas la bonne réponse et n'est pas nécessaire

Vous ne décorez pas la méthode post

@method_decorator(csrf_exempt) 
def dispatch(self, request, *args, **kwargs): 
    return super(OrderPayCheckView, self).dispatch(request, *args, **kwargs) 

@method_decorator(csrf_exempt) 
def post(self, request, *args, **kwargs): 
    return redirect(reverse("home")) 
+0

Merci, mais ne fonctionne toujours pas ... – user3595632

+0

Ce service doit frapper plus d'un point final. Vérifiez les journaux de votre serveur Web. – OregonTrail

+0

Que voulez-vous dire par "frapper plus d'un point final"? J'utilise 'gunicorn' mais rien ne vient dans un journal – user3595632