Pytanie odnośnie recaptcha / flask ( chciałem napisać własną funkcje validującą)
Mam problem ze znalezieniem błędu w skrypcie jaki napisałem, całość działa tak że użytkownik uzupełnia formularz na stronie internetowej i przechodzi proces sprawdzenia rechaptcha.
<form name="add_run" method="POST"> <input type="text" name="run_name" placeholder="Nazwa biegu"/><br/> [...] <input type="text" name="description" placeholder="Opis biegu"><br/><br> <div class="g-recaptcha" data-sitekey="SITE_KEY"></div> <button type="submit"> Dodaj bieg </button>
Dane z formularza są POSTowane do aplikacji (flask/python).
@app.route('/add_run', methods=['GET', 'POST']) [...] if request.method == "POST": # miejsce na mapowanie wartości run_name = request.form['run_name'] [...] description = request.form['description'] grecaptcharesponse = request.form['g-recaptcha-response'] if verify_grecaptcha(grecaptcharesponse) == True: #coś się tutaj psuje - IF # WPISANIE DANYCH DO BAZY DANYCH i przekierowanie na strone udalo sie else: # Przekierowanie na strone nie udało sie else: # obsłużenie Get'a [..]
Problem pojawia się w funkcji verify_grecaptcha która nie zwraca mi true w momencie kiedy dostanie od googla JSON'a który wygląda np tak :
jsonobj = { "success": "true", "challenge_ts": "2016-10-11T11:50:43Z", "hostname": "127.0.0.1" } FUNKCJA VALIDUJĄCA : def verify_grecaptcha(response): secret_key = "SEKRET_KEY" response = "response" url = "https://www.google.com/recaptcha/api/siteverify" + '?secret=' + secret_key + '&response=' + response jsonobj = json.loads(urlopen(url).read().decode('utf-8')) if jsonobj["success"] == 'true' : return True else: return False
Wiem że połączenie z serwerem googla następuje i dostaje prawidłowe odpowiedzi - mam problem prawdopodobnie w rozpakowaniu json'a lub warunku i nie potrafię stwierdzić dlaczego.
W efekcie za każdym razem ląduje na stronie - nie udało się dodać biegu - nawet jeśli wszystko było po stronie formularza na WWW.