Торнадо с плагином регистрации в Facebook - PullRequest
0 голосов
/ 07 января 2011

Facebook выпустила плагин регистрации здесь http://developers.facebook.com/docs/user_registration несколько недель назад.

Мне было интересно, как мы можем реализовать это с Торнадо?

Я получал сообщение об ошибке: 403 POST / auth / fbform (127.0.0.1): аргумент '_xsrf' отсутствует в POST

redirect_url равен http://localhost:8888/auth/fbform И код выглядит следующим образом:

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

Я не понимаю, о каком POST идет сообщение об ошибке, поэтому Я попытался использовать _parse_signed_request из функции get и post.

Пожалуйста, просветите меня. Кстати, я сейчас работаю со своего локального компьютера.

С наилучшими пожеланиями.

1 Ответ

1 голос
/ 04 марта 2011

Вы должны отключить проверку CSRF для этой конечной точки, поскольку запрос поступает с Facebook, а не с вашего собственного сайта.

http://www.tornadoweb.org/documentation#cross-site-request-forgery-protection

...