我有一个名为 Customer 的自定义表,其中 CustomerId 和 Email 作为两个字段(以及其他字段)。我想在 MVC4 站点中使用它。
我有一个名为 DBRuWho 的连接字符串。在我的 App_Start\AuthConfig.cs 文件中,我有一个名为 CheckForSuperAdmin() 的方法,它将为我的表添加一个初始超级用户。
internal static void CheckForSuperAdmin()
{
if (!WebMatrix.WebData.WebSecurity.Initialized)
{
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection("DBRuWho", "customer", "customerId", "email", true);
}
var roles = new WebMatrix.WebData.SimpleRoleProvider();
var users = new WebMatrix.WebData.SimpleMembershipProvider();
if (!roles.RoleExists("SuperAdmin"))
{
roles.CreateRole("SuperAdmin");
if (users.GetUser("superadmin@superadmin.com", false) == null)
{
users.CreateUserAndAccount("superadmin@superadmin.com", "P@ssw0rd53cR3t!");
roles.AddUsersToRoles(new[] {"superadmin@superadmin.com"}, new[] {"SuperAdmin"});
}
}
}
当我“注册用户”时,会创建一个客户行,就像 pages_Membership 表中的一行一样,它们看起来都不错。但是,如果我在上面的“var roles”行设置断点并跳过该方法的其余部分,我只能注册用户。
然后,创建此用户后,我无法登录 - 密码不匹配。
如果我不跳过以“var roles”开头的代码,我会得到一个异常:在调用“WebSecurity”类的任何其他方法之前,您必须调用“WebSecurity.InitializeDatabaseConnection”方法。
这令人沮丧,因为您可以清楚地看到我确实调用了该方法。调用它之后,我在 Watch 窗口中查看它,它表明它已初始化。
所以,我被困在这里......我想使用这个“简单”会员,但它似乎不允许我简单地使用它!
有什么想法吗?我读了很多文章,看起来我做的一切都是正确的,但显然我在这里遗漏了一些东西......
更多信息:这是我映射到 DBRuWho 的连接字符串。
<connectionStrings>
<add name="DBRuWho" connectionString="Server=localhost;Database=ruwho;integrated security=true" providerName="System.Data.SqlClient" />
我很确定我连接正确,因为数据被插入了!当我检查 !roles.RoleExists 并且我无法登录时,我似乎无法摆脱异常。
更新——我删除了 Customer 表中的所有数据和 pages_Membership 表中的所有数据,现在(如果我在启动时跳过 !roles.RoleExists 代码),我可以登录。
但是,当我尝试单步执行时创建我的超级管理员的角色代码,我仍然得到我上面提到的异常。