天天看點

django——在使用django内置的check_password()方法時遇到的坑

最近新寫了一個項目,寫道個人資訊界面的時候有一個修改密碼的接口,需要先填寫使用者的原密碼,原密碼填寫正确才可以填寫新密碼進行修改,那麼我就需要對原密碼進行校驗了。首先說明,資料庫裡面的密碼是利用make_password()方法加密後的密文,也就是說我要在前端寫明文去比對資料庫裡的密文時,需要通過check_password()來驗證,然後我就感覺這很so easy嘛(之前做過修改密碼的),然後就很快速的把代碼敲好了,然後我就去測試,but,給了我一個原密碼錯誤。然後我的第一反應就是不可能,是不是方法出bug了,然後立馬又否定了自己的想法,還是好好看看代碼吧,看了好長時間也沒看出個是以然來(想偷個懶也不行,還是老老實實的debug吧),把自己輸入的明文通過make_password()加密,來和資料庫的密文就行對比,這樣就能很直覺的看出來是否一樣了吧,結果就是不一緻。WHY?之後查了一下資料說的是django内置的make_password()對同一個字元串加密結果不同(當然也可以一些修改,讓加密結果相同,這裡不多說,可以看這篇文章https://www.cnblogs.com/yangxiaolan/p/5988132.html),是以這種方法也不行了,好吧,又沒招了。看來隻能用最後一招了,看源碼,看了之後才發現,check_password()這個方法接受的第一個參數是明文,第二個是密文,隻有這樣才能準确的校驗密碼是否一緻,而我之前确實沒注意參數的位置,以緻于一緻無法準确的校驗出密碼是否正确,找到問題之後頓視覺的自己還是太盲目了,越是簡單的東西越是容易出錯啊。

貼一下我的代碼記錄一下:

django——在使用django内置的check_password()方法時遇到的坑