Добрый день!
Подскажите в чём может быть проблема с SCRF_TOKEN.
Используется стандартные методы авторизации можно сказать из коробки! После того как пользователь вышел из системы его перенаправляет на страницу с формой входа. с этого момента начинается галиматья какая-то при повторном попытке login срабатывает защита от csrf(403 forbiden) класс 'django.middleware.csrf.CsrfViewMiddleware',
хотя в шаблоне присутствует {% csrf_token %} и контекстный процессор присутствует,
пытался и во вьюшке login update токену делать не помогает приходится ждать минут 5-7 и потом заходить.
Вопрос такой!
1. Должны ли визульно совпадать токен который находится в куки и токен из шаблона?(у меня они почему-то не совподают, ну может так и должно быть)
2. Собственно как с эти бороться если система такую ситуацию воспринимает как атаку(есть ли возможность может таймер какой-то уменьшить:) ) совсем системы без защиту не хотелось бы остовлять
def login(request, template="account/login.html", form_class=LoginForm, extra_context=None):
initial = {}
if request.GET.get('email', None):
initial['username'] = request.GET.get('email', None)
form = form_class(request.POST or None, initial=initial)
# raise Exception(request.POST)
if request.method == "POST" and not 'action' in request.POST and form.is_valid():
authenticated_user = form.save()
if authenticated_user is not None:
if authenticated_user.is_active:
info(request, _("Successfully logged in"))
auth_login(request, authenticated_user)
ip_client = get_client_ip(request)
try:
current_ip = IpCurrentUser.objects.get(user=request.user)
current_ip.ip_current = ip_client
except:
IpCurrentUser.objects.create(ip_current=ip_client, user=request.user)
if not request.user.can_register:
return redirect(reverse_lazy('register-presentation'))
return redirect(reverse_lazy('dashboard:dashboard'))
context = {"form": form, "title": _("Log in"), 'recover_form': PasswordResetForm(request.POST or None)}
context.update(extra_context or {})
# raise Exception(settings.SESSION_COOKIE_DOMAIN)
return TemplateResponse(request, template, context)
else:
recover_form = PasswordResetForm(request.POST or None)
if request.method == "POST" and 'action' in request.POST:
form = form_class(initial=initial)
if request.method == "POST" and 'action' in request.POST and recover_form.is_valid():
user = recover_form.save()
send_verification_mail(request, user, "password_reset_verify")
info(request, _("A verification email has been sent with "
"a link for resetting your password."))
context = {"form": form, "title": _("Log in"), 'recover_form': PasswordResetForm(request.POST or None)}
context.update(extra_context or {})
context.update(csrf(request))
# raise Exception(settings.SESSION_COOKIE_DOMAIN)
# return TemplateResponse(request, template, context)
return render_to_response(template, context)
Но вот не понятно на какой стадии происходит проверка csrf?
Здесь вроде как все стандартно нечего сверх естественного я заметил что токен в куки не меняется а в шаблоне меняется этот так и должно быть?
ели децствительно где-то кешируется!
Вопрос ещё такой токены должны менятся после каждого обращения к странице? спрашиваю потому-что заметил что перегрузив несколько раз страничку а токены ни в шаблоне ни в куки не изменились,
Pavel Denisov: Павел первое предположение оказалась верным насчет кеша трабл все таки в нем возможно из-за того что это cms mezanini ну или что-то еще вообщем удалось решить проблему
from django.views.decorators.cache import never_cache
ну и декоратор @never_cache
перед логином токен начал обновляться как и положенно.
Так что спс еще раз