2011-02-08 98 views
1

我正在关注this tutorial。我正在尝试检索用户属性; first_name,但我得到了None无法检索Facebook用户属性

虽然我能够检索一些用户属性,如名称,图片和电子邮件。

main.py

class User(db.Model): 
     user_id = db.StringProperty(required=True) 
     access_token = db.StringProperty(required=True) 
     name = db.StringProperty(required=True) 
     first_name = db.StringProperty() 
     picture = db.StringProperty(required=True) 
     email = db.StringProperty() 
     friends = db.StringListProperty() 
     dirty = db.BooleanProperty() 

     def refresh_data(self): 
      """Refresh this user's data using the Facebook Graph API""" 
      me = Facebook().api(u'/me', 
       {u'fields': u'picture,friends', u'access_token': self.access_token}) 
      self.dirty = False 
      self.name = me[u'name'] 
      self.first_name = me[u'first_name'] 
      self.email = me.get(u'email') 
      self.picture = me[u'picture'] 
      self.friends = [user[u'id'] for user in me[u'friends'][u'data']] 
      return self.put() 

...

def init_facebook(self): 
    """Sets up the request specific Facebook and User instance""" 
    facebook = Facebook() 
    user = None 

    # initial facebook request comes in as a POST with a signed_request 
    if u'signed_request' in self.request.POST: 
     facebook.load_signed_request(self.request.get('signed_request')) 
     # we reset the method to GET because a request from facebook with a 
     # signed_request uses POST for security reasons, despite it 
     # actually being a GET. in webapp causes loss of request.POST data. 
     self.request.method = u'GET' 
     self.set_cookie(
      'u', facebook.user_cookie, datetime.timedelta(minutes=1440)) 
    elif 'u' in self.request.cookies: 
     facebook.load_signed_request(self.request.cookies.get('u')) 

    # try to load or create a user object 
    if facebook.user_id: 
     user = User.get_by_key_name(facebook.user_id) 
     if user: 
      # update stored access_token 
      if facebook.access_token and \ 
        facebook.access_token != user.access_token: 
       user.access_token = facebook.access_token 
       user.put() 
      # refresh data if we failed in doing so after a realtime ping 
      if user.dirty: 
       user.refresh_data() 
      # restore stored access_token if necessary 
      if not facebook.access_token: 
       facebook.access_token = user.access_token 

     if not user and facebook.access_token: 
      me = facebook.api(u'/me', {u'fields': u'picture,friends'}) 
      user = User(key_name=facebook.user_id, 
       user_id=facebook.user_id, 
       access_token=facebook.access_token, 
       name=me[u'name'], 
       first_name=facebook.first_name, 
       email=me.get(u'email'), # optional 
       picture=me[u'picture'], 
       friends=[user[u'id'] for user in me[u'friends'][u'data']]) 
      user.put() 

    self.facebook = facebook 
    self.user = user 

runs.html

<strong>first name:</strong> 
    {{ logged_in_user.first_name }} 

回答

0

我认为这是becouse你问只有“图片“和”朋友“

me = Facebook().api(u'/me', 
       {u'fields': u'picture,friends', u'access_token': self.access_token}) 

尝试只

的access_token
me = Facebook().api(u'/me', 
       {u'access_token': self.access_token})