2010-03-09 4 views
1

Я думаю, что я использую API Users неправильно:Google App Engine: Пользователи 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 или dev-сервера? – prestomation

+0

Это работает на сервере dev на моей машине. –

+0

Вам нужно использовать firebug или какую-либо другую консоль разработки, чтобы увидеть, что происходит, когда вы нажимаете «выйти из системы». Он должен перенаправить вас в/_ah/..., который должен отправить заголовок Set-Cookie, чтобы очистить файл cookie, а затем перенаправить обратно в /. –

ответ

1

Вы сохраняете результат users.get_current_user() в переменном с именем user, но тогда ваш if проверяет значение self.user, которое не является тем же переменным.

Используйте одно и то же имя переменной, и все должно быть в порядке!

+0

Извините, похоже, изначально я не использовал достаточно кода. 'self.user' проверяется внутри функции, тогда как' user' сохраняется на уровне класса. –

Смежные вопросы