Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2017 12:51:39

glavie
Зарегистрирован: 2017-02-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

обновление(изменение) csrf token

Для своего мини проекта хотел применить аякс(авторизация и комментарии), авторизацию прилепил в бар навигации сайта тобишь залогиниться можно на любой стр. проекта, только вот после авторизации на стр. комментариев, комментарий отправить уже не получается (CSRF verification failed. Request aborted.)
login

 def login(request):
    args = {}
    args.update(csrf(request))
    args['username'] = request.user.username
    if request.POST:
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                auth.login(request, user)
                return HttpResponse('')
        else:
            args['login_error'] = "Ошибка авторизации"
            return render_to_response('article/login.html', args)
    else:
        return render_to_response('article/login.html', args)
addcomment
 def addcomment(request):
    if request.POST:
        form = CommentForm(request.POST)
        args = {}
        args.update(csrf(request))
        args['username'] = request.user.username
        args['comments'] = Comment.objects.all()
        if form.is_valid():
            if not request.user.is_anonymous():
                form.instance.comment_author = request.user
            form.save()
            args['form'] = form
            return redirect('/comments/', args)
        return render_to_response('article/comments.html', args)
    return redirect('/comments/', {'username': request.user.username})
html login
 <form action="/auth/login/" method="post" class="navbar-form pull-right" id="login_form" {% if username %} hidden {% endif %}>
                    {% csrf_token %}
                    <input type="text" name="username" id="username" value="admin" class="span2 search-query" placeholder="Логин">
                    <input type="password" name="password" id="password" value="foo" class="span2 search-query" placeholder="Пароль">
                    <input class="btn" type="submit" value="Войти">
                </form>
 <script type="text/javascript">
    $(document).on('submit', '#login_form', function (e){
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url:"/auth/login/",
            data:{
                username: $('#username').val(),
                password: $('#password').val(),
                csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
            },
            dataType: 'json',
            success: function () {
                $('.logout_btn').html('Выйти(' + $('#username').val() + ')');
                $('#logout').removeAttr('hidden');
                $('#login_form').attr('hidden', 'true');
            },
            error: function () {
                window.location.replace('/auth/login/')
            }
        });
    });
</script>
html coomment
 <form action="/addcomment/" method="post" id="comment_form" name="comment_form">
        {% csrf_token %}
        {{ form }}
    <input type="submit" class="btn" value="Отправить комментарий">
    </form>

Отредактировано glavie (Фев. 28, 2017 12:55:33)

Офлайн

#2 Фев. 28, 2017 13:29:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

обновление(изменение) csrf token

glavie
csrfmiddlewaretoken
этот токен должен быть в каждом посте, а не только при авторизации



Офлайн

#3 Фев. 28, 2017 13:45:39

glavie
Зарегистрирован: 2017-02-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

обновление(изменение) csrf token

FishHook
этот токен должен быть в каждом посте, а не только при авторизации
Не могли бы вы поподробнее написать, где и что нужно дописать/подправить ? Так как, во вьюшках и в формах везде токен (на мой неопытный взгляд) прописан.

Офлайн

#4 Фев. 28, 2017 13:48:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

обновление(изменение) csrf token

glavie
Для своего мини проекта хотел применить аякс
https://docs.djangoproject.com/en/1.10/ref/csrf/#ajax



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version