如果你想讓你的所有用戶數據都通過你的DataModel,你確實有一些工作要做。我在我的最後一個項目中做了這件事,並沒有那麼糟糕,但你必須做一些工作。
在您閱讀的這剩下的,請閱讀這篇文章:http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity
默認情況下,ASP.NET身份將使用自己單獨的數據庫扶住登錄信息,你不希望(你希望它存儲在你的DataModel中的一個地方)。
首先,您將不得不提供自己的IUserStore
實現,並在MVCApplications(通常在AccountController中)管理身份驗證時使用它。
我會在你的解決方案稱爲Authentication
添加一個新的項目,它應該有一個類,如:
public class UserStore : IUserStore<IdentityUser, long>,
IUserLoginStore<IdentityUser, long>,
IUserPasswordStore<IdentityUser, long>,
IUserClaimStore<IdentityUser, long>
你必須實現所有來自接口的方法,這要調用到您的DataModel以獲取用戶數據或聲明數據(Facebook登錄信息作爲對IdentityUser的索賠存儲)。
這裏是類,你需要在你的DataModel:
public class IdentityUser : IUser<long>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
public virtual ICollection<ExternalLogin> Logins { get; set; }
public virtual ICollection<UserClaim> Claims { get; set; }
}
public class ExternalLogin
{
[Key]
public long Id { get; set; }
public string LoginProvider { get; set; }
public string ProviderKey { get; set; }
public string UserName { get; set; }
public virtual IdentityUser User { get; set; }
}
public class UserClaim
{
[Key]
public long Id { get; set; }
public string Type { get; set; }
public string Value { get; set; }
public IdentityUser User { get; set; }
}
一些注意事項:我想用戶ID是多頭,所以我延長IUser<long>
。如果你對字符串很酷,那麼你可以在那裏以及爲你的UserStore實現的所有接口上省略type參數。
UserManager是控制器用來與您的身份驗證系統進行交互的對象。他們與UserStores交談,您提供了自定義的實現。 UserStores與DataStore進行通信,在您的情況下,它將是您的DataModel。
下面是您的AccountController可能看起來像使用您的自定義UserStore的片段。你所要做的就是構造一個並將其傳遞給UserManager的構造函數。
public UserManager<IdentityUser, long> UserManager { get; private set; }
public AccountController()
{
IUserStore<IdentityUser, long> userStore = new UserStore();
UserManager = new UserManager<IdentityUser, long>(store);
}
這是我想要的,但在我的新的身份驗證項目..我必須添加哪些nuget包? –
新的認證項目應該只引用這個NuGet包:Microsoft.AspNet.Identity.Core –
此外,你應該刪除對Microsoft.AspNet.Identity.EntityFramework的引用,因爲你現在提供你自己的實現(通過你的數據模型) –