2017-07-25 26 views
0

我想从MongoDB中检索一个值,并在Python中用MongoDB设置一个字符串。这里是我的用户注册功能:从MongoDB中检索一个值并在Python中设置一个字符串(Pymongo)

def registerAccount(): 
    registerUsername = input('Please input a username to be registered into our database.') 


     registerPassword = input('Please input a password to be entered into our database.') 
     passwordHash = sha256_crypt.hash(registerPassword) 

     regDetails = { 
      "username": registerUsername, 
      "passwordhash": passwordHash 
     } 

     db = client.pinnacle 
     users = db.users 
     users.insert(regDetails) 

,这里是我的登录功能:

def login(): 
    db = client.pinnacle 
    users = db.users 

    pwHash = users.find_one({"passwordhash"}) 
    print(str(pwHash)) 

    loginUsername = input('Please input username to be signed in.') 
    loginPassword = input('Please input password to be signed in.') 
    # pprint.pprint(users.find_one({"username": "1"})) 

    # example = users.find_one({"username": "1"}) 

    pbkdf2_sha256.verify(loginPassword, pwHash) 

基本上,我需要的是用户名后立即在数据库中搜索用户名,并获得字符串passwordHash。然后我将设置pwHash到将用PassLib检查的字符串。帮助表示赞赏。谢谢! 另外,如果任何人有兴趣,你可以看到我的完整代码here

+0

你的意思是'user = users.find_one({“userName”:loginUsername})'然后'pbkdf2_sha256.verify(loginPassword,user ['passwordhash'])''。当然,只要你提供了'loginUsername'输入,你实际上只能从数据库中“检索”。否则,你不知道你实际获得了哪些数据。 –

+0

@NeilLunn嘿男人,欣赏帮助。我将其添加到我的脚本中,现在我得到了一个不同的错误。这里的细节因为不适合评论:https://hastebin.com/enekadehiw.py – ByteSize

回答

0

发生这种情况每当我选择登录,即使在用户名或密码

不打字错误是由下面这行造成的:

pwHash = users.find_one({"passwordhash"}) 

在哪里,你应该指定一个过滤器的键/值对,而只是指定一个键。你应该删除上面的行(以及其后的print行)。有关更多信息,另请参阅​​方法。

此外,在相同的功能login(),你有一个键为username的拼写错误。

user = users.find_one({"userName": loginUsername}) 

注意,它应该小写username和你是如何将它们存储在代码的其他地方保持一致。

最后,您应该更换

pbkdf2_sha256.verify(loginPassword, user['passwordhash']) 

下面的方法,因为这是你如何在registerAccount()

sha256_crypt.verify(loginPassword, user['passwordhash']) 

对其进行加密,请考虑在你的代码添加错误检查。即如果users.find_one()返回NoneXYZ

相关问题