2015-04-09 1 views
0

Je suppose que le problème de cette erreur est caché dans le modèle. Voici ma forme:La vérification CSRF a échoué. Demande annulée Cas inhabituel

<form class="form-horizontal loginFrm" action="/login/" method="post"> 
       {% csrf_token %} 
       <div class="control-group">        
       <input type="text" id="inputEmail" placeholder="Email" name = "username"> 
       </div> 
       <div class="control-group"> 
       <input type="password" id="inputPassword" placeholder="Password" name = "password"> 
       </div> 
       <div class="control-group"> 
       <label class="checkbox"> 
       <input type="checkbox"> Remember me 
       </label> 
       </div> 
       <input type="submit" class="btn btn-success" value="Sign in"> 
      </form>  

      <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button> 

Et mon login Vue:

def login(request): 
    args = {} 
    args.update(csrf(request)) 
    if request.POST: 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = auth.authenticate(username=username, password=password) 
     if user is not None: 
      auth.login(request, user) 
      args['username'] = username 
      return HttpResponseRedirect('/', args, context_instance=RequestContext(request)) 
     else: 
      return HttpResponseRedirect('/', args, context_instance=RequestContext(request)) 
    else: 
     return HttpResponseRedirect('/',args,context_instance=RequestContext(request)) 

Dans mon dernier projet, il a fonctionné correctement. Mais voici cette erreur.

+0

avez-vous référé https://docs.djangoproject.com/fr/1.8/ref/csrf/#how-to-use-it? et configuré csrf –

+0

Comment éditez-vous le formulaire de connexion? Utilisez-vous le raccourci 'render_to_response()'? – catavaran

Répondre

0

Afficher la source html sur votre page avec le formulaire de connexion rendu et confirmer que vous avez un champ caché avec le jeton csrf.

Quelque chose comme ceci:

<input type='hidden' name='csrfmiddlewaretoken' value='NzYXoXbN9beogdB6gf22rNXkTNQd6Jri' /> 

Il est possible que la vue que vous avez ne passe pas la context_instance. Cela dépend de la méthode que vous utilisez pour rendre la vue en premier lieu.

Vous pouvez utiliser:

return render_to_response('my_template.html', 
          context_instance=RequestContext(request)) 

Ou le rendu plus facile() qui utilisera automatiquement RequestContext

return render(request, 'my_template.html') 
+0

Le rendu ne fonctionne pas aussi bien – Andrew