.NET 4.0 中的自定義 MembershipProvider
關於這個問題,這裡有一些執行緒,但其中大多數已經過時,其中的參考連結更加過時。
我得到了這個網站,我需要使用它自己的表結構連接到外部 sql 伺服器 (mssql),使用預設的 asp.net 成員提供程序結構不是一個選項。表格佈局非常簡單,使用者表格看起來像這樣(它被稱為個人)
Individuals - UserGuid (uniqueidentifier/guid, unique) - Name (varchar) - Password (varchar) - HasAccess (tinyint/ 1 or 0) - DateTime (datetime) - Log (xml)所需的功能只是讓某人登錄,其餘的不是必需的:)
我遵循了一些指南,但其中大多數都已過時且非常複雜。不幸的是,msdn 範例遵循這種模式,並且文件不是很好。
因此,如果有人獲得一些資源來展示如何,或者願意在此處發布程式碼範例或類似內容,我將不勝感激。
謝謝!
這真的很簡單:
- 創建一個新的 Class 文件(如果你不使用多層系統,在項目的 Models 文件夾中)讓我們呼叫
MyMembershipProvider.cs- 繼承該類
System.Web.Security.MembershipProvider- 自動創建需要的方法(繼承類中的句點+空格)
完畢!
所有方法都會有
NotImplementedException例外,您需要做的就是編輯每個方法並輸入您自己的程式碼。例如,我定義GetUser如下所示:public override MembershipUser GetUser(string username, bool userIsOnline) { return db.GetUser(username); }
db是我添加到類中的數據庫儲存庫MyServicesRepository db = new MyServicesRepository();在那裡,您會發現該
GetUser方法為:public MembershipUser GetUser(string username) { OS_Users user = this.FindUserByUsername(username); if (user == null) return new MembershipUser( providerName: "MyMembershipProvider", name: "", providerUserKey: null, email: "", passwordQuestion: "", comment: "", isApproved: false, isLockedOut: true, creationDate: DateTime.UtcNow, lastLoginDate: DateTime.UtcNow, lastActivityDate: DateTime.UtcNow, lastPasswordChangedDate: DateTime.UtcNow, lastLockoutDate: DateTime.UtcNow); return new MembershipUser( providerName: "MyMembershipProvider", name: user.username, providerUserKey: null, email: user.email, passwordQuestion: "", comment: "ANYTHING you would like to pass", isApproved: true, isLockedOut: user.lockout, creationDate: user.create_date, lastLoginDate: user.lastLoginDate, lastActivityDate: user.lastActivityDate, lastPasswordChangedDate: user.lastPasswordChangedDate, lastLockoutDate: user.lastLockoutDate); }對您使用的所有方法執行此操作(調試項目並查看您需要哪些方法) - 我只使用一些,而不是全部,因為我並不真正關心諸如
ChangePasswordQuestionAndAnswer,DeleteUser等方法只需確保在您中
web.config添加新的會員資格:<membership defaultProvider="MyMembershipProvider"> <providers> <clear/> <add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" connectionStringName="OnlineServicesEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership>您有一個來自 Chris Pels 的精彩影片教程(日期為 2007 年,但仍然大部分有效)和此程式碼,雖然影片教程是在 VB 中,但讓我們了解這些步驟……
<http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider>
我不僅創建了自己的 Membership Provider,而且還創建了 Roles Provider,正如您從上面的程式碼中看到的那樣,它與 MemberShip 一樣簡單,讓您在您的應用程序中使用以下內容:
[Authorize(Roles = "Partner, Admin")] public ActionResult MyAction() { }和
@if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin")) { <div>You're an ADMIN, Congrats!</div> }什麼是自動創建所需的方法(繼承類中的句點+空格)
您可以右鍵點擊,或將游標放在名稱上,然後按
Control+.,然後按space。