2010-03-09 4 views
1

Je pense que j'utilise l'API utilisateurs mal:Google App Engine: API Users agissant bizarrement

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('/')}) 

lien.html:

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

Parfois ça marche, parfois, il n » t. Je clique 10 fois de suite sur le lien «déconnecter» et recharge la page, ce qui me redirige vers la page '/'. Puis, mystérieusement, une fois, je serai déconnecté. La connexion échoue essentiellement de la même manière. Que se passe t-il ici?

Résolu - Cela fonctionne:

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('/')}) 

Il semble que je peux avoir des variables d'instance en se référant à eux comme self.var_name dans une fonction, mais jamais les déclarer à un niveau de classe. Impair.

+0

Est-ce réellement un GAE ou le serveur de dev? – prestomation

+0

Cela fonctionne sur le serveur de dev sur ma machine. –

+0

Vous devez utiliser firebug ou une autre console de développement pour voir ce qui se passe lorsque vous cliquez sur «déconnecter». Il devrait vous rediriger vers/_ah/..., qui devrait envoyer un en-tête Set-Cookie pour effacer le cookie, puis vous rediriger vers /. –

Répondre

1

Vous stockez le résultat de users.get_current_user() dans la variable appelée user, mais votre if vérifie la valeur de self.user, qui n'est pas la même variable. Utilisez le même nom de variable et tout devrait bien se passer!

+0

Désolé, il semble que je n'ai pas inclus assez de code au départ. 'self.user' est vérifié depuis une fonction, alors que' user' est stocké au niveau de la classe. –