2012-01-13 43 views
12

Tôi đã thiết lập dự án django với trang quản trị. Nó hoạt động hoàn hảo trong vài tuần đầu phát triển, không sử dụng trang quản trị trong một thời gian và khi tôi quay lại trang quản trị đã bị hỏng. . Không có vấn đề gì tôi làm, nó sẽ không cho phép tôi để đăng nhậpTrang quản trị trên django bị hỏng

Sau khi nhập tên truy cập và PW, trang quản trị luôn nói:

Please enter a correct username and password. Note that both fields are case-sensitive. 

Tôi đã kiểm tra DB: superuser tồn tại và có is_active, is_superuser và is_staff tất cả True. Tôi đã sử dụng trình bao để đảm bảo mật khẩu chính xác. Tôi đã xóa, xóa và tạo lại cơ sở dữ liệu nhiều lần để đảm bảo không có lỗi. Tôi cũng đã doublechecked middleware, url, INSTALLED_APPS, vv để đảm bảo rằng tất cả chúng đều được thiết lập đúng.

Theo như tôi có thể nói, các trang quản trị hoạt động hoàn hảo ngoại trừ việc họ không bao giờ để cho bất cứ ai đăng nhập.

Bất kỳ ý tưởng những gì đang xảy ra ở đây, hoặc các phương pháp khác để cố gắng để gỡ lỗi? Tôi thực sự bối rối bởi lỗi này.

PS: Trong trường hợp quan trọng, tôi đang sử dụng South cho DB di chuyển, django-social-auth cho đăng nhập FB và local_settings.py riêng biệt cho sản xuất và phát triển (Tôi đã kiểm tra cả hai - xung đột isn 't there.)

+0

Điều gì sẽ xảy ra nếu bạn tạo trang đăng nhập của riêng mình bằng chế độ xem auth.views.login()? – JeffS

+0

Dường như khá nhiều vấn đề tương tự: "Tên người dùng và mật khẩu của bạn không khớp. Vui lòng thử lại." – Abe

+0

Để có được django-social-auth làm việc cho đăng nhập FB, bạn có sửa đổi bất kỳ mã nào có thể thay đổi cách hệ thống chạy xác thực() và đăng nhập() không? Ngoài ra, trong các tuần phát triển, bạn đã xóa và tạo lại dự án, như vậy SECRET_KEY = '...' của settings.py đã thay đổi chưa? Tôi nghĩ rằng chìa khóa này được sử dụng để giải mã mật khẩu, nhưng tôi không tích cực. – Furbeenator

Trả lời

14

Sự cố này có thể liên quan đến phần Phụ trợ xác thực. Vui lòng kiểm tra tệp cài đặt của bạn để biết thông số AUTHENTICATION_BACKENDS.

Hãy thử các giá trị sau:

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

Thông tin thêm về các Official Django Documentation

+0

Bingo. Đó là vấn đề - khi tôi thêm django-social-auth, nó bao gồm toàn bộ danh sách các backend xác thực, bao gồm django.contrib.auth.backends.ModelBackend. Tôi đã nhận xét tất cả các hàng mà tôi không có ý định sử dụng, mà không nhận thấy rằng tôi đã bình luận ra một hàng. – Abe

1

Hãy thử điều này; trong tests.py:

from django.contrib import auth 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = User.objects.create_user('[email protected]', '[email protected]', 'pass') 
     self.u.is_staff = True 
     self.u.is_superuser = True 
     self.u.is_active = True 
     self.u.save() 

    def testLogin(self): 
     self.client.login(username='[email protected]', password='pass') 

Sau đó chạy thử nghiệm với python manage.py test <your_app_name>.AuthTestCase. Nếu điều này trôi qua, hệ thống đang hoạt động, có thể xem tên người dùng và mật khẩu để đảm bảo chúng được chấp nhận.

+1

Bài kiểm tra hoạt động - trả về OK. Nhưng đăng nhập trên trang web vẫn không hoạt động. Tôi đã kiểm tra mật khẩu trong shell, sử dụng check_password, và nó trả về True. Đây là một cái gì đó thậm chí xa lạ: nếu tôi nhập địa chỉ email của tôi thay vì tên superuser, tôi nhận được "Địa chỉ e-mail của bạn không phải là tên người dùng của bạn. Thay vào đó hãy thử 'agong'." Vì vậy, nó rõ ràng có thể truy cập vào hồ sơ trong DB - nó chỉ sẽ không cho phép tôi đăng nhập. – Abe

0

Bạn có thể làm như sau:

  • Nhập mysql của bạn (hoặc cơ sở dữ liệu giao diện điều khiển khác)
  • SỬ DỤNG YourDATABASE;
  • CHỌN * từ auth_user;
  • đồng hồ is_staff và is_superuser mục
  • CẬP NHẬT auth_user SET is_staff = "1" trong đó username = "root";

Sau đó, bạn có thể đăng nhập lại!

0

Tôi gặp sự cố tương tự, nhưng AUTHENTICATION_BACKENDS cờ trên tệp cài đặt không phải là vấn đề đối với tôi. Sử dụng Django Rest Framework bằng cách nào đó tôi đã sửa đổi mật khẩu mà không gọi set_password do đó bỏ qua băm mật khẩu. Đó là lý do tại sao nó hiển thị thông tin đăng nhập không hợp lệ.

tôi đã có thể phát hiện vấn đề này bằng cách chạy thử nghiệm đơn giản để kiểm tra việc tạo ra người dùng bằng một thử nghiệm tương tự:

from django.test import TestCase 

from django.contrib import auth 
from .models import * 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = UserProfile.objects.create_user('[email protected]', 'iamtest', 'pass') 
     self.u.is_staff = True 
     self.u.is_superuser = True 
     self.u.is_active = True 
     self.u.save() 

    def testLogin(self): 
     self.client.login(username='[email protected]', password='pass') 

Nó cũng đáng nói đến là tôi đã tạo ra một người dùng tùy chỉnh tên UserProfile

Các vấn đề liên quan