Chương 4: Membership and User Profiling pptx

55 498 0
Chương 4: Membership and User Profiling pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 1 Chương 4 Membership and User Profiling **** 1/ Thiết kế Để thiết lập bảo vệ, các "khách hàng ảo" đã có một membership system xử lý các hoạt động và các tính năng sau đây: - Người sử dụng phải có khả năng tạo ra các tài khoản mới độc lập, bằng cách điền vào một mẫu đăng ký trực tuyến. - Người sử dụng phải có khả năng thay đổi thông tin của mình sau này hoặc phục hồi chúng nếu họ quên. - Các quản trị viên phải có khả năng cho phép hoặc từ chối quyền truy cập vào phần cụ thể hoặc các trang cá nhân của một số người sử dụng. Các quyền truy cập cần được chỉnh sửa, ngay cả sau khi triển khai các trang web mà không cần sự can thiệp của một người phát triển phức tạp để thay đổi mã hoặc cài đặt. - Các quản trị viên phải có khả năng đình chỉ tạm thời hoặc vĩnh viễn một tài khoản người dùng, chẳng hạn như khi một người dùng không tôn trọng của trang web của chính sách thực hiện. - Các quản trị viên sẽ có thể xem tóm tắt và thống kê dữ liệu như là số tổng số người dùng đăng ký và làm thế nào để nhiều người trong số họ đang trực tuyến tại một thời điểm nào. Các quản trị viên cũng có thể muốn biết cụ thể khi người dùng đăng ký, và thời gian qua mà họ đăng nhập - Một profiling system nên cho phép mỗi người sử dụng đã đăng ký để lưu dữ liệu như các trang web và sở thích chi tiết cá nhân trong một lưu trữ dữ liệu (như là một cơ sở dữ liệu), vì vậy mà các thông tin sẽ được nhớ khi trở lại trang trong tương lai. Các quản trị viên phải có thể xem và chỉnh sửa hồ sơ của mỗi người sử dụng. ASP.NET 2,0 giới thiệu một số lớn các tính năng mới có thể trợ giúp để phát triển thành viên Subsystem. Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 2 Các cơ chế lưu trữ mật khẩu Hiện có ba phương pháp cơ bản để lưu mật khẩu, với mỗi phương pháp cung cấp sự tương thích khác nhau giữa bảo mật và sự tiện lợi của việc phát triển, các quản trị viên, và người sử dụng. 1. Các phương pháp tiện lợi nhất cho các nhà phát triển lưu trữ mật khẩu và các quản trị viên là lưu trữ các mật khẩu như văn bản thuần tuý trong một trường của cơ sở dữ liệu. Điều này cũng thuận tiện cho người sử dụng bởi vì bạn có thể dễ dàng gửi email mật khẩu của một người sử dụng cho họ trong trường hợp họ quên nó. Tuy nhiên, đây là lựa chọn ít an toàn nhất, vì tất cả các mật khẩu được lưu trữ như văn bản thuần tuý , nếu cơ sở dữ liệu của bạn đã được công bởi một hacker, anh ta có thể dễ dàng truy cập vào mật khẩu của tất cả mọi người. Bạn cần phải hết sức cẩn thận về các khóa xuống cơ sở dữ liệu của bạn và đảm bảo rằng bạn của bạn bản đảm an toàn trong sao lưu cơ sở dữ liệu. 2. Để tăng cường an ninh cho lưu trữ mật khẩu, bạn có thể mã hóa các mật khẩu trước khi lưu trữ chúng trong một cơ sở dữ liệu. Có nhiều cách để mã hoá mật khẩu, nhưng phổ biến nhất là symmetric encryption, Trong đó sử dụng một hệ thống mật khẩu được mã hoá cho tất cả các người dừng. Đây là mật mã hai chiều: Bạn có thể mã hóa một mật khẩu và cũng có thể giải mã nó sau này. Điều này cung cấp các phương tiện thuận lợi cho các nhà phát triển, nhưng vẫn còn cung cấp nhiều tiện lợi cho người dùng bởi vì bạn vẫn có thể gửi email cho họ khi họn quên mật khẩu . 3. Mức cao nhất về an ninh đòi hỏi một hình thức mã hóa ngăn cản mà các quản trị viên và các nhà phát triển từ được quyền truy cập vào bất kỳ của người sử dụng mật khẩu của bạn. Điều này sử dụng loại mật mã một chiều được gọi là hashing. Bạn luôn luôn có thể mã hóa một mật khẩu bằng cách hashing mật khẩu với một thuật toán nhưng bạn có thể không bao giờ giải mã nó. Vì thế, bạn lưu trữ các phiên bản hashed mật khẩu, và sau này, khi bạn muốn xác minh mật khẩu của một người sử dụng khi anh ta đăng nhập lại một lần nữa, bạn có thể thực hiện cùng một thuật toán hashing với mật khẩu mà anh ta nhập vào. Sau đó bạn có thể so sánh hash này so với hash bạn được lưu trữ trong cơ sở dữ liệu - nếu hai cái trùng nhau bạn biết được người dùng nhập gõ mật khẩu của mình chính xác. Điều này cung cấp một số ít tiện lợi cho người phát triển, các quản trị viên, và người dùng bởi vì không thể gửi e-mail khi đã quên mật khẩu. Thay vào đó, nếu một người sử dụng quên mật khẩu của mình, sự lựa chọn duy nhất của bạn là thay đổi mật khẩu của người dùng để có một giá trị biết được, và sau đó lưu hash cho mật khẩu mới. Hashing (phương pháp 3) đã được sử dụng trong ấn bản đầu tiên của cuốn sách này, nhưng nó gây ra rất nhiều rắc rối cho các quản trị viên và thất vọng cho người dùng bởi vì người dùng thường thích có thể chọn "khôi phục" một mất mật khẩu mà không có một yêu cầu mới. Chúng tôi sẽ sử dụng mật mã Symmetric (phương pháp 2) trong ấn bản này, nhưng xin vui lòng ghi nhớ rằng mật khẩu hashes phải luôn luôn được sử dụng để bảo vệ các trang web có chứa dữ liệu tài chính hoặc các dữ liệu rất nhạy cảm (chẳng hạn như hồ sơ y tế, bài kiểm tra điểm số, vv). Phần lớn người dùng sẽ không muốn để xem các mật khẩu bí mật ngân hàng gửi tới trong một e-mail, và hầu hết thậm chí không muốn nhân viên của ngân hàng để có thể truy cập vào mật khẩu. Một nhân viên của ngân hàng là người đáng tin cậy hôm nay có thể trở thành một cựu nhân viên không được bằng lòng ngày mai, và rất hay để biết rằng anh ta sẽ không được dùng mật khẩu của bạn! Chế độ xác thực: Windows Security hoặc tùy chỉnh Đăng nhập? Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 3 Việc đầu tiên bạn phải quyết định khi nào bạn thiết lập một cơ chế bảo mật cho một trang web được cho biết là bạn muốn sử dụng Windows hay forms xác thực. Cửa sổ xác thực là dễ nhất để thiết lập và sử dụng, trong khi các hình thức xác nhận yêu cầu bạn tạo một cơ sở dữ liệu và một biểu mẫu đăng nhập. Windows security thường là lựa chọn tốt nhất khi bạn đang phát triển một Intranet cho các trang web mà tất cả các người dùng có thể truy cập vào và được truy cập bởi người dùng của một mạng nội bộ của công ty (nơi mà họ có tên miền tài khoản người dùng). Với Windows security, người dùng được sử dụng bị giới hạn các trang web chính thức mà không cần phải đăng nhập vào trang web, trang web được thực hiện theo yêu cầu của người sử dụng, và hạn chế về an ninh sẽ được tự động thi hành trên tất cả các nguồn cho các mã cố truy cập và sử dụng (thường là các tập tin và các đối tượng cơ sở dữ liệu). Một lợi thế là Windows sẽ lưu trữ an toàn và mã hóa thông tin người dùng. Tuy nhiên, yêu cầu phải có một tài khoản mạng là một thiệt thòi rất lớn mà làm cho nó là sự lựa chọn không tốt cho trang web trên Internet. Nếu bạn sử dụng Windows security cho người sử dụng nằm ở bên ngoài của một mạng của công ty, công ty sẽ được yêu cầu để tạo ra một mạng lưới tài khoản người dùng cho mỗi trang web người sử dụng, mà nó làm chậm cho người dùng để truy cập và tốn kém cho các công ty quản lý. Trong khi bạn có thể viết một số mã để tự động tạo ra tài khoản mạng của Windows, và có thể viết một trang đăng nhập sử dụng Windows mạo danh cảnh phía sau. Quan trọng những tính năng mới được giới thiệu trong ASP.NET 2,0 là hỗ trợ cookieless clients trong các hình thức xác thực. ASP.NET 1.x hỗ trợ các chế độ cookieless chỉ dành cho biến Session, nhưng không phải để xác thực, và bạn đã sử dụng workarounds để làm cho nó làm việc cho cookieless xác thực. Bây giờ bạn chỉ có để đặt <forms> yếu tố của cookieless thuộc tính trong web.config cho đúng hoặc vào AutoDetect. Với AutoDetect, ASP.NET kiểm tra việc của người dùng trình duyệt hỗ trợ các tập tin cookie, và nếu như vậy, sử dụng một tập tin cookie để lưu trữ một Session ID. Nếu một người sử dụng của trình duyệt không hỗ trợ các tập tin cookie, sau đó sẽ vượt qua các ASP.NET Session ID trong URL. Chỉ có những người sử dụng không hỗ trợ cookies phải thấy một đoạn dài và xấu xí Session ID trong URL. Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 4 The "Let's Do Everything on Our Own" Approach Thiết kế một mô-đun để xử lý người dùng và các hồ sơ thành viên không phải là dễ dàng. Nó ng có vẻ đặc biệt khó khăn ở đầu tiên: Bạn có thể dễ dàng chia một vài bảng trong một số cơ sở dữ liệu để lưu trữ dữ liệu (roles, account credentials and details, the associations between roles and accounts, and account profiles) và một API cho phép các nhà phát triển để yêu cầu, tạo, và sửa đổi các dữ liệu này. Tuy nhiên, điều hiếm khi được dễ dàng như chúng xuất hiện lần đầu tiên! Bạn không được giảm bớt các thành phần của các mô-đun, vì chúng là rất quan trọng cho hoạt động của trang web, và thiết kế các mô-đun đúng là rất quan trọng bởi vì tất cả các trang web khác dựa vào mô-đun đó. Nếu bạn thiết kế và triển khai thực hiện những mô-đun tin tức kém, bạn có thể quay trở lại và sửa chữa nó mà không ảnh hưởng đến tất cả các trang web khác của mô-đun (diễn đàn, thương mại điện tử, thư thông báo, phiếu thăm dò ý kiến, vv). Tuy nhiên, nếu bạn quyết định để thay đổi thiết kế của các mô-đun thành viên sau khi bạn đã phát triển mô-đun khác có sử dụng nó, có thển là tốt, bạn sẽ cần phải sửa đổi gì đó trong những mô-đun tốt hơn. Những mô-đun thành viên phải được hoàn thành, nhưng cũng đơn giản để sử dụng, và các nhà phát triển sẽ có thể sử dụng các lớp và phương thức khi họ thiết kế trang quản lý. Họ cũng có thể tạo và chỉnh sửa các tài khoản người dùng bằng cách ghi một vài dòng mã hoặc, nhưng vẫn tốt hơn, không có ở tất cả các mã. ASP.NET 1,1 cung cấp một khuôn khổ là một phần an ninh cho phép bạn xác định vai trò mà có thể hoặc không thể truy cập các trang web hoặc thư mục cụ thể xác định vai trò của các hạn chế trong web.config. Nó cũng đã tạo ra một mật mã xác thực cho người sử dụng tập tin cookie, một khi người dùng đăng nhập. Tuy nhiên, nhà phát triển đã được hoàn toàn chịu trách nhiệm về tất cả các công việc của các văn bản đăng nhập và đăng ký các trang web, xác nhận người sử dụng, gán cho đúng vai trò, và quản lý các tài khoản. Trong những ấn bản đầu tiên của cuốn sách này, chúng tôi đã làm tất cả những gì có thể, với các mã tùy chỉnh. Các giải pháp làm việc tốt, nhưng vẫn bị một vài vấn đề: 1. Các nhà phát triển đã thực hiện tất cả các chương trình kiểm tra an ninh, thông thường là trong sự kiện Page_Load, trước khi làm bất cứ điều gì khác. Nếu bạn sau này muốn thêm vào vai trò người sử dụng hoặc các ACL (danh sách kiểm soát truy cập) của một trang web hoặc trang web của khu vực, bạn phải chỉnh sửa mã, biên tập lại, và tái triển khai việc cài đặt 2. Các thành viên cũng bao gồm hệ thống hồ sơ người dùng. Cơ sở dữ liệu đã có bảng của người sử dụng đầu tiên và cuối cùng tên, địa chỉ, ngày tháng năm sinh và các dữ liệu liên quan. Tuy nhiên, lược đồ bảng đã được cố định, do đó, nếu bạn muốn có thêm nhiều thông tin hơn để các hồ sơ sau này, bạn phải thay đổi cơ sở dữ liệu, các thủ tục liên quan đến lưu trữ, và nhiều phương pháp API, thêm vào giao diện người dùng để chèn dữ liệu. Những điều có thể đã được thực hiện linh hoạt hơn, nhưng nó có nhiều khó khăn để phát triển. Bạn cần phải cân nhắc những lợi thế về thiết kế có tính mở rộng so với thời gian và nỗ lực để thực hiện nó. May mắn thay, ASP.NET 2,0 đã có đầy đủ-đặc trưng và các hồ sơ thành viên. Vâng, đó là đúng, bạn không cần phải viết một dòng mã để đăng ký người sử dụng, bảo vệ các trang quan trị, và kết hợp một cấu hình cho người sử dụng, trừ khi bạn muốn tuỳ chỉnh cách thức chúng hoạt động (ví dụ, để thay đổi định dạng trong đó các dữ liệu này được lưu giữ, hoặc các phương tiện lưu trữ riêng của mình). Phần này lần đầu tiên giới thiệu việc xây dựng và bảo mật hồ sơ trong khuôn khổ ASP.NET 2,0; sau Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 5 đó, bạn sẽ tìm hiểu làm thế nào để thuận tiện sử dụng nó trong dự án riêng của bạn thay vì giải pháp của riêng bạn Membership và lớp MembershipUser Các lớp bảo mật chính của ASP.NET 2,0 trong System.Web.Security.Membership, chứa 1 trong static-methods để tạo, xóa, cập nhật, và lấy các người dùng đăng ký. Bảng sau đây mô tả các phương pháp quan trọng nhất. Phương th ức Di ễn tả CreateUser T ạo tài khoản mới DeleteUser Xóa tài kho ản ng ư ời dùng FindUsersByEmail Tr ả v ề m ộ t m ả ng c ủ a ngư ờ i s ử d ụ ng v ớ i các đ ị a ch ỉ e - mail cung c ấ p. N ế u SQL Server được sử dụng để lưu trữ các tài khoản, các dữ liệu vào e- mail có thể chứa bất kỳ ký tự đại diện ký tự được hỗ trợ bởi SQL Server trong lệnh “LIKE”, chẳng hạn như % cho bất kỳ chuỗi số không hay nhiều ký tự, or _ cho một ký tự FindUsersByName Tr ả v ề m ộ t m ả ng c ủ a ngư ờ i s ử d ụ ng v ớ i các tên cung c ấ p. Ký t ự đ ạ i di ệ n ký tự được hỗ trợ. GeneratePassword T ạ o ra m ộ t m ậ t kh ẩ u m ớ i v ớ i chi ề u dài ch ỉ đ ị nh. Và ch ỉ rõ s ố ký s ố GetAllUsers Tr ả về một mảng chứa các tài khoản đ ã đăng ký GetNumberOfUsersOnline Cho bi ết số thành viên đang online Get User Tìm m ộ t ngư ờ i s ử d ụ ng c ụ th ể theo tên GetUserNameByEmail Tr ả về username c ủa ng ư ời dùng với email đư ợc cung cấp UpdateUser C ập nhật một ng ư ời dùng ValidateUser ki ể m tra tính h ợ p l ệ c ủ a tài kho ả n, tr ả v ề ki ể u boolen Một số trong những phương thức (CreateUser, GetAllUsers, GetUser, FindUsersByName, FindUsersByEmail và UpdateUser) chấp nhận hoặc trả lại theo gợi ý của lớp System.Web.Security.MembershipUser, trong đó đại diện cho một người sử dụng, và cung cấp khá nhiều thông tin chi tiết về nó. Bảng sau đây mô tả các thuộc tính và phương thức được trình bày của lớp này. Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 6 Thu ộc tính Di ễn giải Comment M ộ t ý ki ế n (thư ờ ng là nh ậ p c ủ a ngư ờ i qu ả n tr ị ) k ế t h ợ p v ớ i m ộ t ngư ờ i sử dụng CreationDate Ngay khi ngư ờ i dùng đăng k ý Email đ ịa chỉ e - mail c ủa n gư ời sử dụng IsApproved Cho bi ết các tài khoản đư ợc kích hoạt, và cho ng ư ời sử dụng có thể đăng nhập IsLockedOut Cho bi ết các tài khoản ng ư ời dùng đ ã đư ợc vô hiệu hoá sau khi một số tên đăng nhập không hợp lệ. Điều này là thuộc tính chỉ đọc, và các quản trị viên chỉ có thể gián tiếp cài đặt nó trở lại sai, bằng cách gọi phương thức UnlockUser được mô tả dưới đây. IsOnline Cho bi ế t ngư ờ i s ử d ụ ng hi ệ n nay đang tr ự c tuy ế n LastActivityDate Ngay khi ngư ờ i dùng đăng nh ậ p vào ho ặ c cu ố i cùng đ ã đư ợ c xác nh ậ n. Nếu lần đăng nhập cuối cùng đã được cố định, điều này sẽ không nhất thiết phải là ngày đăng nhập, nhưng nó có thể là ngày khi người sử dụng truy cập trang web và tự động đã được xác thực thông qua các tập tin cookie. LastLockoutDate Ngay khi ngư ời sử dụng đ ã đư ợc khóa tự đ ộng bởi hệ thống thành viên, sau khi một (cấu hình) số đăng nhập không hợp lệ LastLoginDate ngày cu ối cùng đăng nh ập LastPasswordChangedDate Khi ngư ời sử dụng cuối cùng thay đ ổi mật khẩu của mình PasswordQuestion Các câu h ỏi đ ể hỏi ng ư ời sử dụng khi họ quên mật khẩu - đư ợc sử dụng để chứng minh nó thực sự là của họ UserName U sername c ủa ng ư ời dùng Thu ộc tính Di ễn giải ChangePassword Thay đ ổi mật khẩu của ng ư ời sử dụng. Mật khẩu hiện thời phải được cung cấp. ChangePasswordQuest ionAndAnswer Thay đ ổi câu hỏi và câu trả lời đư ợc hỏi của một ng ư ời sử dụng quên mật khẩu của mình. Cần phải nhập mật khẩu mới (để người nào đó không thể thay đổi mật khẩu này cho một người nào khác). GetPassword Tr ả lại mật khẩu hiện tại của bạn. Tùy thu ộc vào cách thức hệ thống thành viên được thiết lập, nó có thể yêu cầu câu trả lời cho những câu hỏi của mật khẩu người sử dụng như là đầu Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 7 Thu ộc tính Di ễn giải vào và s ẽ không làm việc nếu chỉ một mật khẩu hash đư ợc lưu trong cơ sở dữ liệu. ResetPassword T ạo ra một mật khẩu m ới cho ng ư ời sử dụng. Đây ch ỉ là chức năng để thay đổi mật khẩu nếu các thành viên hệ thống đã được thiết lập để hash mật khẩu. UnlockUser M ở khóa ng ư ời dùng, nếu tr ư ớc đó h ọ đ ã đư ợc khóa bởi hệ thống vì lý do quá nhiều nỗ lực đăng nhập không hợp lệ Khi bạn thay đổi một thuộc tính của người sử dụng, các giá trị mới không phải là ngay lập tức được lưu trữ, bạn cần phải gọi phương thức UpdateUser của Membership class để làm điều đó. Điều này được thực hiện để bạn có thể gọi để có cập nhật nhiều thuộc tính của người dùng, và do đó cải thiện hiệu suất. Bằng cách sử dụng hai lớp với nhau, bạn có thể quản lý các dữ liệu tài khoản một cách trực quan và đơn giản. Nó ở ngoài phạm vi của cuốn sách này để cung cấp chi tiết của tất cả các phương thức và overload, nhưng tôi có thể cho bạn thấy một số ví dụ về cách sử dụng trong thực tế của họ - xin vui lòng tham khảo MSDN cho tất cả các chi tiết về các lớp . Dưới đây là một số mã cho đăng ký một tài khoản mới và xử lý các trường hợp ngoại lệ mà có thể được nâng lên, nếu một tài khoản với tên người dùng chỉ định hoặc địa chỉ e-mail đã tồn tại: string msg = "User created successfully!"; try { MembershipUser newUser = Membership.CreateUser( "Marco", "secret", "mbellinaso@wrox.com"); } catch (MembershipCreateUserException exc) { msg = "Unable to create the user. "; switch (exc.StatusCode) { case MembershipCreateStatus.DuplicateEmail: msg += "An account with the specified e-mail already exists."; break; case MembershipCreateStatus.DuplicateUserName: msg += "An account with the specified username already exists."; break; case MembershipCreateStatus.InvalidEmail: msg += "The specified e-mail is not valid."; break; case MembershipCreateStatus.InvalidPassword: Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 8 msg += "The specified password is not valid."; break; default: msg += exc.Message; break; } } lblResult.Text = msg; Nếu bạn muốn thay đổi một số thông tin của người sử dụng, trước hết bạn lấy một MembershipUser là đại diện cho người sử dụng, thay đổi một số thuộc tính như mong muốn, và sau đó cập nhật người sử dụng, như được hiển thị dưới đây: MembershipUser user = Membership.GetUser("M arco"); if (DateTime.Now.Subtract(user.LastActivityDate).TotalHours < 2) user.Comment = "very knowledgeable user; strong forum participation!"; Membership.UpdateUser(user); Để xác nhận hiệu lực người dùng khi đăng nhập chỉ cần một dòng mã (và thậm chí không có, vì bạn sẽ thấy ngắn): BOOL isValid = Membership.ValidateUser ( "Marco", "secret"); Trong chương này, bạn sẽ sử dụng các lớp , để thực hiện các tính năng sau đây trong trang quản trị:  Lấy tổng số người sử dụng và xác định xem có bao nhiêu người trong số họ đang trực tuyến.  Tìm người sử dụng bằng một phần của tên người dùng hoặc địa chỉ e-mail.  Hiển thị một số thông tin trả về người sử dụng được tìm kiếm, được liệt kê trong một lưới , ví dụ như ngày người sử dụng cuối cùng hoạt động và cho dù họ đang hoạt động hay không. Trong một trang khác, chúng tôi sẽ hiển thị tất cả các chi tiết của một người sử dụng cụ thể và sẽ cho phép người quản trị có thể thay đổi một số chi tiết Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 9 The Provider Model Design Pattern Tôi sử dụng thuật ngữ "data store" để tham khảo các vật lý phương tiện nào để lưu dữ liệu – điều này có nghĩa là các dữ liệu lưu trong một cơ sở dữ liệu hoặc trong Active Directory, nhưng .NET trừu tượng cơ chế lưu trữ dữ liệu từ các lớp thao tác dữ liệu. Lớp provider là một lớp lưu trữ dữ liệu đại diên các lớp khác để thao tác dữ liệu. Điều này cung cấp mô hình thiết kế, được giới thiệu trong Chương 3, là pervasive .NET 2,0 - bạn có thể thường xuyên "plug in" khác nhau cùng nhà cung cấp để thay đổi cơ chế, được sử dụng để lưu và phục hồi dữ liệu. Các Membership class sử dụng một lớp thứ hai (được gọi là Membership provider) mà thực sự biết thông tin chi tiết của một dữ liệu lưu trữ và thực hiện tất cả các hỗ trợ logic để đọc và ghi dữ liệu vào / từ nó. Bạn có thể nghĩ rằng hầu hết các Membership provider như là một lớp business (trong đó chỉ có thao tác dữ liệu), và các lớp provider cung cấp dịch vụ truy cập dữ liệu lớp này cung cấp các chi tiết của thao tác. Hai built-in trong providers sẵn có cho các hệ thống thành viên, và bạn có thể chọn một trong các cài đặt trong tập tin web.config. Các built-in là providers cho SQL Server 2000/2005 (SqlMembershipProvider) và cho Active Directory (ActiveDirectoryMembershipProvider), nhưng bạn cũng có thể viết thư riêng của bạn hoặc tìm từ một bên thứ ba (để sử dụng với Oracle, MySQL, DB2, vv ., hoặc có thể tệp tin XML). Hình 4-1 cung cấp một hình ảnh đại diện của các nhà cung cấp dịch vụ thiết kế mô hình mẫu. Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 10 Tôi thấy rằng việc sử dụng các mô hình provider cung cấp sự linh hoạt lớn, bởi vì bạn có thể thay đổi provider được sử dụng bởi các thành viên API bên trên mà không ảnh hưởng tới phần còn lại của mã, bởi vì bạn chỉ cần truy cập vào các thành viên lớp "business" từ các trang và các lớp business khác , và không phải là provider trực tiếp. Trên thực tế, bạn có thể bỏ qua ngay provider được sử dụng, và ở đâu và làm thế nào để các dữ liệu được lưu giữ (điều này là ý tưởng đằng sau abstraction các dữ liệu lưu trữ). Abstraction rõ ràng là cung cấp cho người sử dụng cảm giác rằng họ không cần phải biết chính xác như dữ liệu của họ sẽ được lưu trữ thế nào, nhưng bây giờ chúng tôi cũng có abstraction cho các nhà phát triển, vì họ cũng không luôn luôn cần phải biết làm thế nào dữ liệu được lưu giữ ! Để tạo mới một provider bạn có thể bắt đầu bằng cách xây dựng một provider mới mà kế thừa trực tiếp từ System.Web.Security.MembershipProvider (mà lần lượt kế thừa từ System.Configuration.Provider.ProviderBase), hoặc chỉ cần bạn có thể tùy chỉnh một số các phương thức hiện hành của một Provider. Ví dụ, hãy giả sử bạn muốn sửa đổi SqlMembershipProvider để kiểm tra mật khẩu của một người sử dụng để đảm bảo rằng nó không trùng tên người dùng. Bạn chỉ đơn giản cần phải định nghĩa lớp riêng của bạn , trong đó kế thừa từ SqlMembershipProvider, và bạn có thể chỉ cần ghi đè lên phương thức CreateUser như thế này: class SqlMembershipProviderEx : SqlMembershipProvider { public override MembershipUser CreateUser( string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) { if (username.ToLower() == password.ToLower()) { status = MembershipCreateStatus.InvalidPassword; return null; } else { return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); } } } quan trọng [...]... ID="lblUserName" AssociatedControlID="UserName" Text="Username:" /> *... Email = this.Request.QueryString["Email"]; CreateUserWizard1.DataBind(); } } protected void CreateUserWizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e) { UserProfile1.SaveProfile(); } protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e) { // add the current user to the Posters role Roles.AddUserToRole(CreateUserWizard1.UserName, "Posters"); } } } 26 Thêm trang PasswordRecovery.aspx... recovery dựa trên 1 câu hỏi bảo mật không? 3./ Users và passwords: Nếu bạn sử dụng Web Site Administration Tool, Bạn có thể tạo và quản lý users trực tiếp Ngược lại, bạn phải gọi membership functions (lập trình) để tạo và quản lý users > 0) profile = this.Profile.GetProfile(this.UserName); www.bqa.com.vn www.bsm.com.vn Page 31 Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 ddlSubscriptions.SelectedValue... Membership. CreateUser thay cho bạn Theo mặc định, mã được tạo ra theo thiết kế (và được nhìn thấy trong Source View) là như sau: www.bqa.com.vn www.bsm.com.vn Page 18 Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and. .. //txtSignature.Text = profile.Forum.Signature; } } public void SaveProfile() { // Nếu thuộc tính UserName chứa 1 chuỗi rỗng, lưu profile cho user hiện hành // ngược lại cho user được chỉ rõ (specified user) ProfileCommon profile = this.Profile; if (this.UserName.Length > 0) profile = this.Profile.GetProfile(this.UserName); profile.Preferences.Newsletter = (SubscriptionType)Enum.Parse(typeof(SubscriptionType),... www.bqa.com.vn www.bsm.com.vn Page 11 Building CMS E-Commerce Project using ASP.NET 3.5 in C# 2008 and SQLServer 2005 Những định nghĩa sau là nơi mà các SqlMembershipProvider được xác định và cấu hình: 10 Tạo thư mục Newsletter . những phương thức (CreateUser, GetAllUsers, GetUser, FindUsersByName, FindUsersByEmail và UpdateUser) chấp nhận hoặc trả lại theo gợi ý của lớp System.Web.Security.MembershipUser, trong đó đại diện. 2008 and SQLServer 2005 www.bqa.com.vn www.bsm.com.vn Page 1 Chương 4 Membership and User Profiling **** 1/ Thiết kế Để thiết lập bảo vệ, các "khách hàng ảo" đã có một membership. " ;User created successfully!"; try { MembershipUser newUser = Membership. CreateUser( "Marco", "secret", "mbellinaso@wrox.com"); } catch (MembershipCreateUserException

Ngày đăng: 02/07/2014, 02:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan