2009-01-09 31 views
10

Có thể kiểm soát định dạng mật khẩu được tạo tự động bằng một cuộc gọi đến MembershipUser.ResetPassword() không?Làm cách nào để kiểm soát định dạng MembershipUser.ResetPassword()

Tôi muốn có thể cho phép hoặc không cho phép các ký tự đặc biệt nhất định trong mật khẩu được tạo.

Tôi đang sử dụng SqlMembershipProvider với định dạng mật khẩu bị băm.

Cảm ơn.

+0

Tại sao bạn muốn giới hạn ký tự đặc biệt? Có hầu như không có lý do có thể bảo vệ cho điều này và rất thân thiện với người dùng. –

+1

@ John Sheehan: Mặt khác, tôi đã có khiếu nại từ người dùng rằng mật khẩu đã tạo chứa các ký tự khó tìm thấy. Hãy thử nói với người dùng (không lập trình) để tìm | hoặc ~ phím trên bàn phím. Loại bỏ các ký tự khó gõ có thể được coi là di chuyển thân thiện với người dùng. Tất nhiên, bạn có thể yêu cầu người dùng sao chép và dán mật khẩu, nhưng tôi cũng đã gặp phải sự kháng cự đó. –

+0

Bạn có thể dễ dàng sử dụng mật khẩu an toàn, nhưng bạn không nên hạn chế những gì mọi người có thể sử dụng. –

Trả lời

1

Hãy xem bài viết này - Changing the autogenerated password format in the SqlMembershipProvider.

tôi đã đưa ra một cách nhanh chóng để hack SqlMembershipProvider để tạo mật khẩu ít phức tạp, và nó đã được đơn giản như việc tạo ra một lớp nhà cung cấp mới được thừa kế từ SqlMembershipProvider, sau đó trọng phương pháp GeneratePassword.

Đây không phải là giải pháp hoàn toàn được giải quyết nhưng có thể hữu ích.

0

Tôi đã hy vọng rằng sẽ có một số cài đặt cấu hình có thể sử dụng nhưng ghi đè phương thức GeneratePassword() hoạt động cho trường hợp của tôi.

Chúng tôi đã có một lớp tiện ích mã hóa sẽ tạo ra các chuỗi mật khẩu ngẫu nhiên để nó là một thay đổi khá nhanh.

19

Bạn có thể muốn làm điều này trong hai bước, như được xác định Mark Fitzpatrick ở đây: http://bytes.com/groups/net-asp/689452-how-reset-users-password-without-having-use-passwordrecovery#post2740740

Đầu tiên Thiết lập lại mật khẩu, sau đó ngay lập tức thay đổi nó sang một định dạng của ý thích của bạn. Rõ ràng sử dụng một chuỗi cố định như trong ví dụ của Mark sẽ KHÔNG được khuyến nghị - bạn muốn triển khai some random string generator.

user.ChangePassword(user.ResetPassword(), MyMethodToGenerateRandomPassword()); 
+1

Tôi thích giải pháp của bạn. Tôi đã thử giải pháp của David HAust, nhưng khi gọi MembershipUser.ResetPassword(), nó vẫn sẽ cung cấp cho tôi mật khẩu siêu mật mã. – sshow

+3

+1: đây phải là câu trả lời. – naveen

2

Hôm nay bạn cũng có thể sử dụng phương pháp Membership.GeneratePassword và vượt qua một MinRequiredPasswordLength hoặc sử dụng các tài sản đã được xác định trong Web.config như thế này:

var newPassword = 
        // 0 = Number of non alphanumeric characters 
        Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0); 

    user.ChangePassword(user.ResetPassword(), newPassword); 
Các vấn đề liên quan