2013-09-28 49 views
2

下面是一個示例,按照我當前的理解,該示例應該可以工作。代碼波紋管是直接從測試複製在./manage.py shellDjango auth.models.User未通過身份驗證,但存在於身份驗證數據庫中


有註冊用戶在AUTH數據庫:

from django.contrib.auth.models import User 
user_in_database = User.objects.all()[0] 
print user_in_database.username  #username 
print user_in_database.password  #pass 

身份認證測試:

from django.contrib.auth import authenticate 
authenticated_user = authenticate(username = user_in_database.username, 
            password = user_in_database.password) 
type(authenticated_user) #NoneType 

它返回無,我會期待它從數據庫中返回用戶。我在這裏錯過了關鍵的東西嗎?

回答

3

你缺少的是user_in_database.password不是用戶的密碼。相反,它是實際密碼的散列(只是打印它來檢查你自己)。

基本上,當您撥打authenticate時,您沒有使用正確的密碼。

因此,authentication fails, and returns None(因爲這是傳遞不正確憑據時django返回的結果)。

+0

你是對的!但是,我的初始用戶創建也存在缺陷。用戶使用'save()'而不是'User.objects.create_user'創建,導致'user_in_database.password'的非相關表示形式。# – TheMeaningfulEngineer

+0

@Alan Ha!這通常很棘手:( –