2010-12-03 3 views
0

Я пытаюсь создать скрипт проверки пользователя, который перенаправляет пользователя, если пароли и файлы cookie пользователя пустые или ложные. Но независимо от того, что я делаю, он всегда отправляет пользователя на «/ wrong2». Он даже не утруждает себя проверкой if. Это то, что код выглядит на данный момент:Проблема перенаправления 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") 

Я новичок в Python и пытаюсь узнать это, и я просто не могу найти, где неисправность. Может ли кто-нибудь увидеть, где это?

+0

Конечно, это беспокоит проверку `if`. Ваше состояние всегда всегда оценивается как `False`. – geoffspear 2010-12-03 21:07:03

ответ

2

Вы используете hasattr, чтобы проверить, содержит ли dict конкретный ключ, но вместо этого вы должны использовать оператор in. Функция hasattr просто проверяет, имеет ли объект определенный атрибут.

Таким образом, вы могли бы вместо того, чтобы написать:

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

Но я думаю, что немного лучше было бы это, что гарантирует, что пустые имена пользователей и пароли (думаю username = '') не получают впустили:

# 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") 
Смежные вопросы