2013-09-06 32 views
8

Tôi có đoạn mã sau:Django Authenticate trả Không

user = User(username='[email protected]',email='[email protected]') 
user.set_password('pass') 
user.save() 
u = authenticate(username='[email protected]', password='pass') #this always returns None!!! 

Vấn đề là, u luôn là None. Tôi đã theo dõi các mẫu mã trên các bài đăng tràn ngăn xếp khác và đã thu hẹp nó xuống các dòng trên.

Bất kỳ ý tưởng nào về những gì có thể xảy ra?

+0

bạn có một số cài đặt tùy chỉnh? – mariodev

Trả lời

9

Đặt một cái gì đó như thế này trong các thiết lập của bạn

#Authentication backends 
AUTHENTICATION_BACKENDS = (
     'django.contrib.auth.backends.ModelBackend', 
    ) 

hoặc nếu bạn đang sử dụng userena cho các tài khoản của bạn

#Authentication backends 
AUTHENTICATION_BACKENDS = (
    'userena.backends.UserenaAuthenticationBackend', 
    'guardian.backends.ObjectPermissionBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 
0

Tại sao bạn không tạo một người dùng như sau:

user = User.objects.create_user(username="whatever", email="[email protected]", password="password") 
user = authenticate(username="whatever",password="password") 
+0

Cảm ơn, H H H. Đó là mã ban đầu của tôi. Tôi đã thay đổi nó trở lại và vẫn không có vinh quang. Hãy để tôi đăng mã trên một câu trả lời dưới đây ... –

+0

-1. Cái này sai. Bằng cách này, mật khẩu sẽ được lưu chưa được lưu và sẽ không khớp khi được kiểm tra với phiên bản băm. –

+0

Daniel, tôi đã thử nghiệm điều này và nó đã băm mật khẩu. Cho dù đó là một mật khẩu khác, tôi sẽ không bao giờ biết, nhưng nó chắc chắn là băm. Vấn đề của tôi là tôi đã thiếu cài đặt Xác thực Backends –

0

Thay đổi như sau. Vẫn không có vinh quang

email = "[email protected]" 
password = "pass" 
user = User.objects.create_user(email,email,password) 
u = authenticate(username=email, password=password) 
+1

đã tìm ra. Tôi đã thiếu cài đặt cho Xác thực Backends –

+1

bạn có thể xây dựng trên cài đặt đó không? Tôi cảm thấy tôi có thể có cùng một vấn đề – mgPePe

+0

xin vui lòng xem câu trả lời của Ramast ở trên. Tôi đánh dấu nó là câu trả lời. –

1

Điều thú vị đủ, check_password trả về True trong những điều sau đây:

eml = "[email protected]" 
pw = "pass" 
uname = 'w2' 
user = User.objects.create_user(uname,eml,pw) 
user.save() 
log.debug("Password check passes?") 
log.debug(user.check_password(pw)) # Logs True!!! 
user = authenticate(username=uname, password=pw) 
1

Trong settings.py, thêm

AUTH_USER_MODEL = your custom user class 

ví dụ nếu tên ứng dụng django là văn phòng và người dùng tùy chỉnh lớp là tài khoản rồi

AUTH_USER_MODEL = 'office.Account' 
Các vấn đề liên quan