2017-07-25 30 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

相關問題