2010-12-03 6 views
0

J'essaie de créer un script de vérification utilisateur qui redirige l'utilisateur si les cookies de mot de passe et de nom d'utilisateur sont vides ou faux. Mais peu importe ce que je fais, il envoie toujours l'utilisateur à "/ wrong2". Il ne prend même pas la peine de vérifier si. C'est ce que le code ressemble à l'heure actuelle:Problème de redirection de Google App Engine

 dictionary = self.request.str_cookies 
    if hasattr(dictionary, 'password') and hasattr(dictionary, 'username'): 
     checkq = db.GqlQuery("SELECT * FROM Users WHERE username = :1 AND password = :2", dictionary['username'], dictionary['password']) 
     checkresult = checkq.get() 
     if checkresult.username and checkresult.password is None: 
      self.redirect("/wrong") 
    else: 
     self.redirect("/wrong2") 

Je suis très nouveau pour python et sont en train de l'apprendre et je ne peux pas trouver où la faute est. Quelqu'un peut-il voir où c'est?

+0

Bien sûr, cela dérange de vérifier le 'if'. Votre état évalue simplement toujours 'Faux '. – geoffspear

Répondre

2

Vous utilisez hasattr pour vérifier si un dict contient une clé particulière, mais vous devez utiliser l'opérateur in à la place. La fonction hasattr vérifie simplement si un objet a un attribut particulier.

Ainsi, vous pouvez écrire à la place:

if 'username' in self.request.cookies and 'password' in self.request.cookies: 
    # check against the datastore 

Mais je pense qu'une approche un peu mieux ce serait, ce qui garantit que les noms d'utilisateur ou des mots de passe vides (pensez username = '') ne sont pas laisser dans:

# will be None if the cookie is missing 
username = self.request.cookies.get('username') 
password = self.request.cookies.get('password') 

# This makes sure that a username and password were both retrieved 
# from the cookies, and that they're both NOT the empty string (because 
# the empty string evaluates to False in this context) 
if username and password: 
    # check against the datastore 
else: 
    self.redirect("/wrong2")