2010-10-11 27 views
6

Tôi đang làm việc để triển khai nhà cung cấp tư cách thành viên tùy chỉnh hoạt động dựa trên lược đồ hiện có trong cơ sở dữ liệu của tôi và có một vài suy nghĩ/câu hỏi.Kiểm soát đăng nhập và nhà cung cấp tư cách thành viên tùy chỉnh

Điều khiển đăng nhập sẽ tự động gọi phương thức ValidateUser của nhà cung cấp thành viên, cho dù tôi triển khai nhà cung cấp thì điều duy nhất mà điều khiển đăng nhập quan tâm là giá trị bool được trả về bằng phương pháp này. Những gì tôi đang bối rối là có thể có nhiều lý do tại sao một nỗ lực đăng nhập thất bại; người dùng bị khóa, quá nhiều lần thử trong một khoảng thời gian, v.v. Không có cách nào mà tôi thấy truyền đạt điều đó đến bộ điều khiển để nó có thể hiển thị thông báo thích hợp. Các thuộc tính khác của nhà cung cấp thành viên như PasswordStrengthRegularExpression hoàn toàn không có hiệu lực đối với việc kiểm soát đăng nhập (ngoài hộp), tôi hy vọng rằng nó sẽ tự động chuyển thành các trình xác nhận biểu thức chính quy, nhưng điều đó dường như không phải là trường hợp. Vì vậy, có vẻ như tôi cần phải khởi tạo các thuộc tính kiểm soát đăng nhập với các thiết lập này trong cấu hình của nhà cung cấp nếu tôi muốn chúng tự kiểm soát.

Nếu điều duy nhất mà điều khiển đăng nhập không thực hiện được (không xử lý thủ công các sự kiện và thực hiện khởi tạo như mô tả ở trên) gọi phương thức ValidateUser trên nhà cung cấp thành viên, tôi không thấy cách nào để chuyển về Đăng nhập kiểm soát lý do tại sao xác thực không thành công hoặc thậm chí làm những việc như điều chỉnh các yêu cầu xác thực dựa trên một cửa sổ thời gian nhất định. Cuối cùng câu hỏi của tôi là tại sao tôi thậm chí sẽ sử dụng các nhà cung cấp thành viên sau đó kết hợp với kiểm soát đăng nhập? Có vẻ như nó chỉ được thiết kế cho một đáp ứng kiểu Có/Không, rất hạn chế. Nếu tôi muốn xây dựng trong logic với các thông điệp khác nhau cho người dùng, tôi cần xử lý các sự kiện kiểm soát đăng nhập và gọi các lớp xác thực của riêng tôi sẽ xử lý tất cả các yêu cầu nghiệp vụ của tôi cũng như trả về một thông báo lỗi tùy chỉnh. hiển thị cho người dùng để họ biết tại sao nỗ lực của họ không hợp lệ.

Trừ khi tôi sai trong các giả định của mình, có vẻ như giao diện giữa Kiểm soát đăng nhập với tư cách là API thành viên quá hạn chế để hữu ích. Có lẽ API hoạt động tốt hơn cho các điều khiển auth khác như ChangePassword tốt hơn nhưng đối với kiểm soát Đăng nhập thực tế, tôi không thấy điểm.

Tôi đánh giá cao suy nghĩ của bạn.

Trả lời

4

Bạn nói đúng. Để thực hiện logic bạn đang nói, bạn cần triển khai sự kiện Authenticate. Bằng cách đó bạn có thể viết lại thông báo lỗi tùy chỉnh sau khi bạn thực hiện xác thực của riêng mình.

Mặt khác, tôi không nghĩ rằng cường độ mật khẩu nên được xác thực dựa trên xác thực mà đúng hơn là khi tạo người dùng.

bạn có thể viết một cái gì đó như thế này:

protected void Login_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    try 
    { 
     e.Authenticated = myMembershipProvider.ValidateUser(LoginControl1.UserName,LoginControl.Password); 

    } 
    catch(Exception ex) 
    { 
     LoginControl1.FailrureText = ex.Message; 
    } 
} 

Và ném ngoại lệ tùy chỉnh của bạn trong phương pháp ValidateUser của bạn. Vui lòng mã hóa ...

+0

Nhà cung cấp tư cách thành viên có mất giá trị của nó đối với tôi vào thời điểm đó không? Nếu tôi tiếp tục và xử lý sự kiện Authenticate, thì tôi phải tự gọi phương thức ValidateUser trên chính nhà cung cấp đó. Phương pháp đó sẽ không đủ nên tôi sẽ phải gọi một phương thức khác mà thực sự sẽ cho tôi biết tại sao đăng nhập thất bại. Tôi đồng ý với bạn về độ mạnh của mật khẩu. – e36M3

+0

@ e36M3 - Yeap bạn đã đúng. đó là con đường để đi. Những gì tôi sẽ làm là gọi đầu tiên tất cả xác nhận, viết lỗi trên tài sản ErrorMessage kiểm soát và cuối cùng, nếu một cái gì đó không thành công, –

2

Tôi đã có cùng một loại vấn đề khi sử dụng phương thức liên quan đến đăng nhập (Thay đổi mật khẩu) với Nhà cung cấp thành viên nơi tôi muốn biết thêm thông tin sau đó chỉ cần Có/Không. Hy vọng rằng, bạn có thể thực hiện một giải pháp tương tự như cách giải quyết mà tôi đã đưa ra. Xem phần này:

Membership provider ChangePassword method return type problem

+0

Cảm ơn, rất tốt khi biết rằng tôi sẽ không phát điên. Nó không rơi như thể chúng ta đang thiếu thứ gì đó ở đây? Điều này làm cho tôi muốn bỏ nhà cung cấp thành viên để bắt đầu.Tôi không cần nó nếu tôi sẽ phải hack nó cũng như hack các điều khiển để làm việc với nó để có được những thứ đơn giản như thông báo lỗi hữu ích hơn ra khỏi nó. Lợi ích duy nhất của nhà cung cấp đối với tôi là việc tích hợp hộp với các điều khiển, điều này dường như rất hạn chế. – e36M3

1

Okey, nếu bạn không thể thay đổi điều khiển đăng nhập, cuối cùng bạn sẽ cần một giao diện điều khiển đăng nhập khác!

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