如何使用facebook graph api for python tornado阅读facebook用户的电子邮件?

如何使用facebook graph api for python tornado阅读facebook用户的电子邮件?,python,facebook-graph-api,tornado,Python,Facebook Graph Api,Tornado,我已将“电子邮件”纳入扩展参数范围。如何在龙卷风物体中阅读电子邮件 我的LoginHandler如下所示: class LoginHandler(tornado.web.RequestHandler, tornado.auth.FacebookGraphMixin): @tornado.web.asynchronous def get(self): userID = self.get_secure_cookie('user_id') if sel

我已将“电子邮件”纳入扩展参数范围。如何在龙卷风物体中阅读电子邮件

我的LoginHandler如下所示:

class LoginHandler(tornado.web.RequestHandler, tornado.auth.FacebookGraphMixin):
    @tornado.web.asynchronous
    def get(self):
        userID = self.get_secure_cookie('user_id')

        if self.get_argument('code', None):
            self.get_authenticated_user(
                redirect_uri='http://localhost:8000/auth/login',
                client_id=self.settings['facebook_api_key'],
                client_secret=self.settings['facebook_secret'],
                code=self.get_argument('code'),
                callback=self.async_callback(self._on_facebook_login))

            return
        elif self.get_secure_cookie('access_token'):
            self.redirect('/')
            return

        self.authorize_redirect(
            redirect_uri='http://localhost:8000/auth/login',
            client_id=self.settings['facebook_api_key'],
            extra_params={'scope': 'email'}
        )

    def _on_facebook_login(self, user):
        if not user:
            self.clear_all_cookies()
            raise tornado.web.HTTPError(500, 'Facebook authentication failed')

        self.set_secure_cookie('user_id', str(user['id']))
        self.set_secure_cookie('user_name', str(user['name']))
        self.set_secure_cookie('access_token', str(user['access_token']))
        self.redirect('/')
self.facebook_request("/me", access_token=user["access_token"], callback=self._save_user_profile)

我需要在一个对象中收集电子邮件并将其插入数据库。

我几天前也遇到了同样的问题。Facebook文档并不能真正帮助您使用API。你得四处挖掘

另外,解决方案是发出facebook_请求()并获取用户配置文件。在该用户配置文件中,您可以找到该用户的电子邮件。将请求放入登录回调中

请求如下所示:

class LoginHandler(tornado.web.RequestHandler, tornado.auth.FacebookGraphMixin):
    @tornado.web.asynchronous
    def get(self):
        userID = self.get_secure_cookie('user_id')

        if self.get_argument('code', None):
            self.get_authenticated_user(
                redirect_uri='http://localhost:8000/auth/login',
                client_id=self.settings['facebook_api_key'],
                client_secret=self.settings['facebook_secret'],
                code=self.get_argument('code'),
                callback=self.async_callback(self._on_facebook_login))

            return
        elif self.get_secure_cookie('access_token'):
            self.redirect('/')
            return

        self.authorize_redirect(
            redirect_uri='http://localhost:8000/auth/login',
            client_id=self.settings['facebook_api_key'],
            extra_params={'scope': 'email'}
        )

    def _on_facebook_login(self, user):
        if not user:
            self.clear_all_cookies()
            raise tornado.web.HTTPError(500, 'Facebook authentication failed')

        self.set_secure_cookie('user_id', str(user['id']))
        self.set_secure_cookie('user_name', str(user['name']))
        self.set_secure_cookie('access_token', str(user['access_token']))
        self.redirect('/')
self.facebook_request("/me", access_token=user["access_token"], callback=self._save_user_profile)
您可以从您的_on_facebook_login()回调中返回的“user”对象访问用户令牌。现在定义另一个名为_save_user_profile()的回调


如果您设置重定向,您不会收到“异常:在写入标题后无法重定向”吗?或者在调用同步保存用户配置文件之前重定向?我解决了重定向问题,这是我的代码有问题。但是现在我得到了一个无限的重定向循环。我不确定这是否与某些Facebook设置有关。。