2011-10-12 116 views
1

我試圖make the user variable available serveside,現在我已經注意到,我的網頁的行爲我想它的方式,如果我重裝:如何使此頁面在登錄/註銷時重新加載?

enter image description here

所以,我怎麼能強制頁面在Facebook的重載連接/斷開?有關此代碼的任何其他想法?我嘗試了明顯的JavaScript,但創建了一個循環。你可以幫我嗎?由於

{% load i18n %} 
<!DOCTYPE html> 
<html xmlns:fb="https://www.facebook.com/2008/fbml"> 
    <head> 
    <title> 
     Test Facebook SDK 
    </title> 
    </head> 
<body> 
<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=164355773607006"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script><div class="fb-login-button" autologoutlink="true" data-show-faces="true" data-width="200" data-max-rows="1"></div> 
{% if greeting or user or current_user or twittername %} 
<div id="user-ident"> 

<span>{% trans "Welcome," %} <b>{{user.nickname}}{% if not user %}{{ current_user.name|escape }}{% endif %}{% if not user and not current_user %}{{ twittername }}{% endif %}</b></span> 

</div> 
<fb:login-button autologoutlink="true">Logout</fb:login-button>   
{% else %} 
<fb:login-button autologoutlink="true">Login with Facebook</fb:login-button>{% endif %} 
</body> 
</html> 

更新

我刪除了所有Javascript和cookie,因爲它們不需要和沒有使用OAuth 2.0一個純Python的解決方案,以使我的方案「與Facebook登錄」:

如何將Facebook添加爲OAuth 2.0提供商:下面是我如何使用OAuth而不是javascript/cookie爲我的網站製作「使用Facebook登錄」,這是python僅適用於使用Facebook的OAuth 2.0,並且據我所知可以工作:

class FBUser(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) 
    profile_url = db.StringProperty() 
    access_token = db.StringProperty(required=True) 
    name = db.StringProperty(required=True) 
    picture = db.StringProperty() 
    email = db.StringProperty() 
    friends = db.StringListProperty() 

class I18NPage(I18NHandler): 
    def get(self): 
    if self.request.get('code'): 
      args = dict(
      code = self.request.get('code'), 
      client_id = facebookconf.FACEBOOK_APP_ID, 
      client_secret = facebookconf.FACEBOOK_APP_SECRET, 
      redirect_uri = 'http://www.koolbusiness.com/', 
     ) 
     logging.debug("client_id"+str(args)) 
      file = urllib.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args)) 
      try: 
     logging.debug("reading file") 
      token_response = file.read() 
     logging.debug("read file"+str(token_response)) 
      finally: 
      file.close() 
      access_token = cgi.parse_qs(token_response)["access_token"][-1] 
      graph = main.GraphAPI(access_token) 
      user = graph.get_object("me") #write the access_token to the datastore 
     fbuser = main.FBUser.get_by_key_name(user["id"]) 
      logging.debug("fbuser "+str(fbuser)) 

      if not fbuser: 
      fbuser = main.FBUser(key_name=str(user["id"]), 
           id=str(user["id"]), 
           name=user["name"], 
           profile_url=user["link"], 
           access_token=access_token) 
      fbuser.put() 
      elif fbuser.access_token != access_token: 
      fbuser.access_token = access_token 
      fbuser.put() 

登錄鏈接是

<a href="https://www.facebook.com/dialog/oauth?client_id=164355773607006&redirect_uri=http://{{host}}/"><img src="/_/img/loginwithfacebook.png"></a>重定向,讓我拿起的access_token在上面的方法和註銷很簡單:

<a href="https://www.facebook.com/logout.php?next=http://www.koolbusiness.com&access_token={{access_token}}">{% trans "Log out" %}</a>

回答

1

如果你的網頁的內容對事件的依賴發生在頁面加載後(即Facebook登錄/註銷),您最好的選擇可能是使用jQuery + Ajax分別加載和/或重新加載從屬元素。

+0

任何示例代碼? –

相關問題