Я пытаюсь создать миксин, который проверит действительность reCaptcha.
Я новичок в Django, я пытался сделать это с тем, что я знаю
Проверка выполняется правильно, но проблема в разрешении.
Когда он снова перенаправляет меня на страницу входа, он проходит аутентификацию и перенаправляет на Dashboard, значит страница успеха.
Посмотрите на миксин.
class CheckRecaptchaMixin(AccessMixin):
error_message = 'Invalid reCAPTCHA. Please try again.'
def get_error_message(self):
return self.error_message
def handle_not_valid_recaptcha(self):
message = self.get_error_message()
if self.raise_exception:
raise PermissionDenied(message)
messages.error(self.request, message)
print('login redirect')
return redirect_to_login(self.request.get_full_path(), self.get_login_url(), self.get_redirect_field_name())
def dispatch(self,request, *args, **kwargs):
request.recaptcha_is_valid = None
if request.method == 'POST':
recaptcha_response = request.POST.get('g-recaptcha-response')
data = {
'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
'response': recaptcha_response
}
r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
result = r.json()
if result['success']:
print('This is success')
request.recaptcha_is_valid = True
else:
print('This is error')
request.recaptcha_is_valid = False
self.handle_not_valid_recaptcha()
return super(CheckRecaptchaMixin, self).dispatch(request,*args, **kwargs)
В моих views.py
class UserLoginView(CheckRecaptchaMixin,LoginView):
template_name = 'accounts/login.html'
redirect_field_name='next'
Когда reCaptcha правильно, он печатает только This is success
, а когда reCaptcha неправильно, он печатает This is error
и login redirect
.
Это означает, что он успешно обрабатывает reCaptcha, но не перенаправляет на страницу входа, и еще одна важная вещь, которую я должен заметить, на моей странице выхода из системы, я вижу error_message
, который я определил в mixin ('Invalid reCAPTCHA. Пожалуйста, повторите попытку.')