2010-08-15 33 views
8

Tôi muốn làm như sau với xác thực django của:cách truy cập yêu cầu trong phụ trợ xác thực tùy chỉnh django?

  • Đăng nhập không chính xác log-in nỗ lực
  • tài khoản tạm khóa sau khi 'x' số không chính xác nỗ lực đăng nhập
  • Đăng nhập thành công log-in.

Tôi nghĩ rằng phần phụ trợ xác thực tùy chỉnh sẽ là giải pháp.

Tôi có thể thực hiện hầu hết những gì tôi muốn, nhưng tôi muốn đăng nhập IP và REMOTE_HOST của người dùng thực hiện thử.

Tôi làm cách nào để truy cập đối tượng yêu cầu trong phụ trợ xác thực?

Cảm ơn

Trả lời

10

Việc xác thực backend có thể mất bất kỳ số lượng các thông số tùy chỉnh cho phương pháp authenticate(). Ví dụ:

class MyBackend: 
    def authenticate(self, username=None, password=None, request=None): 
     # check username, password 
     if request is not None: 
      # log values from request object 

Nếu bạn đang gọi xác thực theo quan điểm của riêng bạn, bạn có thể vượt qua các đối tượng yêu cầu:

from django.contrib.auth import authenticate 

def login(request): 
    # discover username and password 
    authenticate(username=username, password=password, request=request) 
    # continue as normal 

Nếu bạn đang sử dụng xem đăng nhập django (hoặc đăng nhập quản trị), bạn sẽ không có thêm thông tin. Nói một cách đơn giản, bạn sẽ phải sử dụng chế độ xem đăng nhập tùy chỉnh của riêng mình.

Ngoài ra, hãy cẩn thận khi tự động khóa tài khoản: bạn cho phép người nào đó cố ý khóa một trong các tài khoản của người dùng (từ chối dịch vụ). Có nhiều cách để giải quyết vấn đề này. Ngoài ra, hãy đảm bảo nhật ký các lần thử không chính xác của bạn không chứa bất kỳ mật khẩu nào đã cố gắng.

+0

Tôi đang mở rộng ModelBackend - python không cho phép tôi sử dụng các phương thức quá tải? Điều gì sẽ là một cách tốt để đạt được điều này? Chỉ cần đổi tên phương thức 'xác thực' và gọi nó theo quan điểm của tôi? – Roger

+0

Tôi cần phải đặt gì trong chế độ xem đăng nhập? chỉ cần sao chép toàn bộ khung nhìn đăng nhập contrib.auth hiện tại? Tôi không hiểu vì phương pháp đó không bao giờ gọi là 'xác thực' ... – Roger

+0

Bạn chắc chắn có thể quá tải trong python. 'contrib.auth' yêu cầu các backend để có phương thức' authenticate', vì vậy bạn sẽ phải gọi nó là. –

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