![](/img/trans.png)
[英]How to read email of facebook user using Facebook graph api for python-tornado?
[英]How do I get user email using Facebook Graph API in GAE Python?
我在Google App Engine上使用Facebook Graph API。 我能够从用户那里获取所有基本信息。 但是,当我尝试获取需要权限的任何用户信息时,例如发送电子邮件,它总是显示为无。 我已经按照开发人员博客上提供的整个教程进行了操作。
这是我的代码:
class User(db.Model):
id = db.StringProperty(required=True)
created = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
name = db.StringProperty(required=True)
email = db.StringProperty(required=True)
profile_url = db.StringProperty(required=True)
access_token = db.StringProperty(required=True)
class BaseHandler(webapp.RequestHandler):
"""Provides access to the active Facebook user in self.current_user
The property is lazy-loaded on first access, using the cookie saved
by the Facebook JavaScript SDK to determine the user ID of the active
user. See http://developers.facebook.com/docs/authentication/ for
more information.
"""
@property
def current_user(self):
if not hasattr(self, "_current_user"):
self._current_user = None
cookie = facebook.get_user_from_cookie(
self.request.cookies, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET)
if cookie:
# Store a local instance of the user data so we don't need
# a round-trip to Facebook on every request
user = User.get_by_key_name(cookie["uid"])
if not user:
graph = facebook.GraphAPI(cookie["access_token"])
profile = graph.get_object("me")
user = User(key_name=str(profile["id"]),
id=str(profile["id"]),
name=profile["name"],
email=profile["email"],
profile_url=profile["link"],
access_token=cookie["access_token"])
user.put()
elif user.access_token != cookie["access_token"]:
user.access_token = cookie["access_token"]
user.put()
self._current_user = user
return self._current_user
这是模板/ HTML:
<fb:login-button autologoutlink="true" perms="email"></fb:login-button>
{% if current_user %}
<p><a href="{{ current_user.profile_url }}"><img src="http://graph.facebook.com/{{ current_user.id }}/picture?type=square"/></a></p>
<p>Hello, {{ current_user.name|escape }}</p>
<p>email: {{ current_user.email }} </p>
{% endif %}
有什么不对? 是否有其他方式来获取用户电子邮件?
电子邮件是在用户创建时写的。 也许您正在尝试访问在您没有电子邮件权限时创建的用户,因此书面电子邮件为“无”。 问题是否也出现在新的User对象中?
刚放弃使用facebook.py和facebookoauth.py并使用urlfetch制作了我自己的OAuth 2客户端。 请参阅Facebook文档中的“在Web应用程序中验证用户” 。
另外,我将scope='email'
放入请求https://graph.facebook.com/oauth/authorize?
和https://graph.facebook.com/oauth/access_token?
。
您的代码看起来正确,所以我假设您没有正确的扩展权限。 如果您要尝试获取电子邮件地址,则必须要求“电子邮件”扩展权限。 您可以在此处找到扩展权限列表。 在使用Graph API读取这些属性之前,您必须要求这些权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.