6

我在Google App Engine上使用Facebook Graph API。我能夠從用戶獲取所有基本信息。但是,當我試圖獲取任何需要權限的用戶信息時,例如電子郵件,它總是顯示爲無。我已經按照developers blog提供了整個教程。如何在GAE Python中使用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 %} 

有什麼錯嗎?是否有其他方式獲取用戶電子郵件?

+0

嘗試添加從FB獲得的配置文件的一些調試輸出,並查看電子郵件是否存在。當FB授權對話框出現時,它是否包含電子郵件許可? – cope360 2010-11-23 13:51:55

回答

0

您的代碼看起來正確,所以我會假設您沒有正確的擴展權限。如果您要嘗試獲取電子郵件地址,則必須要求提供「電子郵件」擴展權限。您可以找到擴展權限列表here。您必須先獲得這些權限,然後才能使用Graph API讀取這些屬性。

+1

他在登錄按鈕標記中顯示perms =「email」。這應該提示權限。 – cope360 2010-11-23 13:51:17

1

電子郵件寫在用戶創建。也許你試圖訪問在你沒有電子郵件許可時創建的用戶,因此書面電子郵件是None。問題是否也出現在新的用戶對象中?

相關問題