Сначала я должен сказать, что я прочитал это , и это не то, что мне нужно.Я хочу иметь формы, которые я сделал с помощью html / css, а не django форм.
И мой метод основан на это , то есть на самом деле в PHP.
Я написал код, и он отлично работает , но я считаю, что должен быть лучший способ сделать это.
Суть кода в том, что я отправляю свою форму, отправляю данные и токен Google Reaptcha в свою функцию, изатем выполнить некоторый процесс, затем, чтобы перенаправить на относительную страницу с результатами процессов, я снова возвращаю URL и статус в jQuery и перенаправляю на эту страницу с помощью jQuery.
Вот мой код:
login.html:
<script src="https://www.google.com/recaptcha/api.js?render=here is recaptcha public key"></script>
<!-- login form and etc -->
<script>
$('#loginForm').submit(function() {
// stop what loginform is going to do
event.preventDefault();
var username = $('#username').val();
var password = $("#password").val();
grecaptcha.ready(function () {
grecaptcha.execute("here is recaptcha public key",
{action: "{% url 'basic_app:login_page' %}"}).then(function (token_id)
{$('#loginForm').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token_id + '">');
$.post("{% url 'basic_app:login' %}", // url
{username: username,password: password,
token_id: token_id,csrfmiddlewaretoken: '{{ csrf_token }}'},
function( result ){
console.log(result);
if(result.status == 0) {
window.location.replace(result.url)
} else if (result.status == 1){
window.location.replace(result.url)
}
},
'json');
});
});
});
views.py:
def user_login(request):
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
token_id = request.POST.get('token_id')
if(token_id):
secretKey = "here is recaptcha secret key"
data = {
'secret': secretKey,
'response': token
}
r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
result = r.json()
....
## some codes for more security
....
response = {'status': 0, 'message':"", 'url': '/'}
return HttpResponse(json.dumps(response), content_type='application/json')
else:
response = {'status': 0, 'message':"", 'url': '/login_page'}
return HttpResponse(json.dumps(response), content_type='application/json')
....
есть ли проблемы с безопасностью в этом методе?
и есть ли способ написать лучший код для использования recaptcha V3?спасибо.