gpt4 book ai didi

python - 如何使用用于 python-tornado 的 Facebook graph api 读取 facebook 用户的电子邮件?

转载 作者:行者123 更新时间:2023-11-28 17:50:19 25 4
gpt4 key购买 nike

我已将“电子邮件”包含在扩展参数范围内。如何阅读 tornado 对象中的电子邮件?

我的 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('/')

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

最佳答案

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

Anw,解决方案是创建一个 facebook_request() 并获取用户配置文件。在该用户个人资料中,您可以找到用户的电子邮件。将请求放在登录回调中。

请求看起来像这样:

self.facebook_request("/me", access_token=user["access_token"], callback=self._save_user_profile)

您从 _on_facebook_login() 回调中返回的“用户”对象访问用户 token 。现在定义另一个名为 _save_user_profile() 的回调。

def _save_user_profile(self, user):
if not user:
raise tornado.web.HTTPError(500, "Facebook authentication failed.")
try:
User.objects(email=user['email']).get()
except DoesNotExist, e:
new_u = User()
new_u.first_name = user['first_name']
new_u.last_name = user['last_name']
new_u.email = user['email'] #THIS IS WHAT YOU NEED
new_u.username = user['username']
new_u.gender = user['gender']
new_u.locale = user['locale']
new_u.fb_id = user['id']
new_u.save()
else:
#User exists
pass

关于python - 如何使用用于 python-tornado 的 Facebook graph api 读取 facebook 用户的电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com