Frage

released Facebook eine Registrierung Plugin hier veröffentlicht http://developers.facebook.com/docs/user_registration vor wenigen Wochen.

Ich habe mich gefragt, wie können wir dies mit Tornado implementieren?

hielt ich einen Fehler zu erhalten: 403 POST / Auth / fbform (127.0.0.1): '_xsrf' Argument von POST fehlt

Die redirect_url ist http: // localhost: 8888 / Auth / fbform Und der Code ist wie folgt:

class FBFormLoginHandler(BaseHandler, tornado.web.RequestHandler):
    def get(self):
        print "i'm in GET"
        print self.request
        # parse and check data
        data = _parse_signed_request(self.request['_xsrf'], "XXXXX")
        return
    def post(self):
        print "i'm in POST"
        print self.request
        # parse and check data
        data = _parse_signed_request(self.request['_xsrf'], "XXXXX")
        return

    def _parse_signed_request(signed_request, app_secret):
        print "hello in parse_signed_request"
        try:
          l = signed_request.split('.', 2)
          encoded_sig = str(l[0])
          payload = str(l[1])
        except IndexError:
          raise ValueError("'signed_request' malformed")

        sig = base64.urlsafe_b64decode(encoded_sig + "=" * ((4 - len(encoded_sig) % 4) % 4))
        data = base64.urlsafe_b64decode(payload + "=" * ((4 - len(payload) % 4) % 4))

        data = json.loads(data)

        if data.get('algorithm').upper() != 'HMAC-SHA256':
          raise ValueError("'signed_request' is using an unknown algorithm")
        else:
          expected_sig = hmac.new(app_secret, msg=payload, digestmod=hashlib.sha256).digest()

        if sig != expected_sig:
          raise ValueError("'signed_request' signature mismatch")
        else:
          return data

Ich verstehe nicht, die POST die Fehlermeldung über spricht, so Ich versuchte, die _parse_signed_request von der GET und POST-Funktion zu verwenden.

Bitte erleuchte mich. Ich bin zur Zeit von meinem lokalen Computer durch die Art und Weise zu arbeiten.

Mit freundlichen Grüßen.

War es hilfreich?

Lösung

Sie müssen deaktiviert CSRF Überprüfung auf diesen Endpunkt, da die Anforderung von Facebook kommt und nicht Ihre eigene Website

http://www.tornadoweb.org/documentation#cross- Website-Anfrage-Fälschungsschutz

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top