2010-03-09 38 views
1

我想我使用用戶API錯誤:谷歌應用程序引擎:API的用戶行爲異常

class BaseHandler(webapp.RequestHandler): 
    user = users.get_current_user() 

    def header(self, title): 
    if self.user: 
     render('Views/link.html', self, {'text': 'Log out', 'href': users.create_logout_url('/')}) 
    else: 
     render('Views/link.html', self, {'text': 'Log in', 'href': users.create_login_url('/')}) 

link.html

<p> 
    <a href="{{href}}">{{text}}</a> 
</p> 

有時工作,有時它不」噸。我將連續10次單擊「註銷」鏈接,然後重新加載頁面,它會將我重定向到'/'頁面。然後,神祕地,我將退出其中一次。登錄失敗的方式基本相同。這裏發生了什麼?

解決 - 這工作:

class BaseHandler(webapp.RequestHandler): 

    def __init__(self): 
     self.user = users.get_current_user() 

    def header(self, title): 
     if self.user: 
      render('Views/message.html', self, {'msg': "Welcome, %s" % self.user.nickname()}) 
      render('Views/link.html', self, {'text': 'Log out', 'href': users.create_logout_url('/')}) 
     else: 
      render('Views/link.html', self, {'text': 'Log in', 'href': users.create_login_url('/')}) 

它看起來像我可以通過參考它們爲self.var_name的功能,但從來沒有在類級別聲明他們擁有實例變量。奇。

+0

這實際上是一個GAE還是開發者服務器? – prestomation

+0

這是在我的機器上的開發服務器上運行。 –

+0

你需要使用螢火蟲或其他開發控制檯來查看當你點擊'註銷'時發生了什麼。它應該將你重定向到/ _ah/...,它應該發送一個Set-Cookie頭來清除cookie,然後將你重定向回到/。 –

回答

1

你存儲在一個名爲user變量users.get_current_user()的結果,但隨後你if檢查self.user的價值,這是不一樣的變量。

使用相同的變量名稱,一切都應該沒問題!

+0

對不起,它看起來像我最初沒有包含足夠的代碼。 'self.user'正在被一個函數檢查,而'user'被存儲在類的級別。 –