2015-04-09 6 views
0

Я полагаю, что проблема этой ошибки скрыта в шаблоне. Вот моя форма:Не удалось выполнить проверку CSRF. Запрос прерван. Необычный случай

<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> 

И мой login вид:

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)) 

В моем последнем проекте, она работала правильно. Но вот эта ошибка.

+0

Вы упомянули https://docs.djangoproject.com/en/1.8/ref/csrf/#how-to-use-it? и сконфигурирован csrf –

+0

Как вы вывести форму для входа? Вы используете ярлык 'render_to_response()'? – catavaran

ответ

0

Просмотрите источник html на своей странице с предоставленной формой входа и убедитесь, что у вас есть скрытое поле с токеном csrf.

Что-то вроде этого:

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

Вполне возможно, что вид у вас есть не передавая context_instance. Это зависит от того, какой метод вы используете, чтобы визуализировать представление в первую очередь.

Вы могли бы использовать:

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

Или проще визуализации(), который будет автоматически использовать RequestContext

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

рендеринг не работает. – Andrew

Смежные вопросы