2011-11-07 87 views
1

我运行一个GQLQuery查找,如果用户输入正确的凭据:GQLQuery检索空结果集

class User(db.Model): 
    UserName = db.TextProperty(); 
    Password = db.TextProperty(); 
    Ticket = db.TextProperty(); 

class Authentication(webapp.RequestHandler): 
    def post(self): 
     str_user = self.request.get('user') 
     str_password = self.request.get('password') 
     user = db.GqlQuery("SELECT * FROM User WHERE UserName = :1 AND Password = :2",str_user, str_password) 
     self.response.out.write(str_user) 
     self.response.out.write(str_password) 
     self.response.out.write(str([u.UserName for u in user])) 

     if user.count() > 0: 
      ticket = str(uuid.uuid4()) 
      user.Ticket = ticket 
      self.response.out.write(ticket) 
     else: 
      self.response.out.write('Not authorized!') 

查询总是返回一个空的结果集(与“WHERE” -clause)虽然我我确定我已经通过了正确的参数。

我试着连接我自己的查询字符串,但结果保持不变。如果我删除了“WHERE”条款,我得到了数据库的所有用户,所以我猜数据库连接没问题。

+1

我希望你不要在数据存储中以明文存储用户密码。 –

+0

借调。如果可能,您应该使用联合登录或Google帐户身份验证。如果您必须存储用户凭据,请对用户的密码进行散列处理。 –

+0

不要只是散列它 - 使用像PBKDF2这样的方法。仅靠散布是不够的。 –

回答

3

这可能是因为您在字段上使用了TextPropertyTextProperty适用于多行文本并且未编入索引。您无法在查询中查找非索引值。您应该使用StringProperty作为单行文本值。

+0

确实如此。我不知道谷歌数据存储就这样工作。非常感谢你。它解决了这个问题,今天我学到了一些新的东西:-) – Frederik