我认为将 SimpleMembersihp 添加到 MVC4 Web 是一件简单的事情。并非如此。模板化代码(例如 C#)非常适合支持它,但 web.config 大多是不可知的——缺乏配置任何特定安全机制的元素。我正在关注 Scott Allen 的 Pluralsight 上的 MVC4 教程,该教程将 aspnet-Membership 与 EF 内容混合在一起。也许我错过了一些东西,但 C# 成员资格类没有与 aspnet-Membership 交互,它们正在执行 SimpleMembership。因此,我删除了 aspnet-Membership,但现在我无法让 PackageManager 进行“更新数据库”。它抱怨“您必须调用 WebSecurity.InitializeDatabaseConnection 方法...”。因此,我在调用中添加了一个 _AppStart.cshtml 文件,但 PM 似乎不知道。
_AppStart.cshtml:
@using WebMatrix.WebData;
@{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true);
}
网页配置:
<appSettings>
<add key="enableSimpleMembership" value="true" />
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<roleManager enabled="true" defaultProvider="simple">
<providers>
<clear/>
<add name="simple" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
</providers>
</roleManager>
<membership defaultProvider="simple">
<providers>
<clear/>
<add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
</providers>
</membership
配置.cs:
protected override void Seed(eManager.Web.Infrastructure.DepartmentDb context)
{
context.Departments.AddOrUpdate(d => d.Name,
new Department() { Name = "Engineering" },
new Department() { Name = "Sales" },
new Department() { Name = "Shipping" },
new Department() { Name = "Human Resources" }
);
SimpleRoleProvider roles = new WebMatrix.WebData.SimpleRoleProvider();
SimpleMembershipProvider membership = new SimpleMembershipProvider();
if (!roles.RoleExists("Admin"))
{
roles.CreateRole("Admin");
}
//if (membership.GetUser("ej", false) == null)
//{
// membership.CreateUserAndAccount("ej", "FluffyBunny@1", false);
// string[] u = { "ej" };
// string[] r = { "Admin" };
// roles.AddUsersToRoles(u, r);
//}
}
未创建角色“Admin”。?