register from google: https://www.google.com/recaptcha/admin/create
Frontend:
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="6LcJHocdAAAAAAIT2vXp6NHDf6WrvE2Zz8u00_BExj"></div>
axios.post(this.host + '/register/', {
username: this.username,
password: this.password,
password2: this.password2,
email: this.email,
recaptcha: grecaptcha.getResponse(), // get the value of recaptcha
}, {
responseType: 'json',
})
.then(response => {
if (response.data.code==0) {
location.href = 'index.html';
}
})
.catch(error => {
}
backend:
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
username = body.get("username")
password = body.get("password")
password2 = body.get("password2")
email = body.get("email")
recaptcha_response = body.get("recaptcha")
url = 'https://www.google.com/recaptcha/api/siteverify'
values = {}
values["secret"] = settings.RECAPTCHA_PRIVATE_KEY
values["response"] = recaptcha_response
# headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
result = requests.post(url, data=values)
''' https://developers.google.com/recaptcha/docs/verify '''
if not result.json().get("success"): # result.json().get("success") is true means success
return JsonResponse({"code":400, "errmsg":'Invalid reCAPTCHA. Please try again.'})
user = User.objects.create_user(username=username,password=password,email=email) # password is encrypted!
user.active = False # will send an email for activating then set True
user.save()