Основният проблем е следният: когато потребители, които не разрешават бисквитки, се опитат да влязат в моя сайт Django, те получават CSRF грешка и се пренасочват към страница 403 Forbidden. Би било много по-добре, ако получат съобщение, което им казва, че трябва да разрешат бисквитките.
Мисля да се справя с това, като настроя CSRF_FAILURE_VIEW и просто покажа страница, която казва, че са необходими бисквитки. Предположението е, че единственият начин легитимен потребител да получи CSRF грешка е като не разреши бисквитки.
Въпреки това, когато гледам кода на Django, изглежда, че е възможно да се покаже грешка без бисквитки във формуляра за влизане. Ето чистия метод на django.contrib.auth.forms.AuthenticationForm:
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username and password:
self.user_cache = authenticate(username=username,
password=password)
if self.user_cache is None:
raise forms.ValidationError(
self.error_messages['invalid_login'] % {
'username': self.username_field.verbose_name
})
elif not self.user_cache.is_active:
raise forms.ValidationError(self.error_messages['inactive'])
self.check_for_test_cookie()
return self.cleaned_data
def check_for_test_cookie(self):
if self.request and not self.request.session.test_cookie_worked():
raise forms.ValidationError(self.error_messages['no_cookies'])
Изглежда, че трябва да покаже съобщение за грешка без бисквитки. Но когато стартирам с деактивирани бисквитки, CSRF грешката предотвратява изпълнението на чистия метод.
Какво ми липсва тук?
Актуализация: Опитах да настроя CSRF_FAILURE_VIEW на моя собствен манипулатор. На манипулатора се предава низ, обясняващ грешката. В този случай получавам „CSRF cookie not set.“, което е достатъчно добро, за да открие, че бисквитките са деактивирани.
django.core.context_processors.csrf
във вашияsettings.py
? - person Drewness   schedule 26.02.2014