У меня есть пользовательская таблица с именем «Клиент» с идентификатором клиента и электронной почтой в виде двух полей (среди прочего). Я хочу использовать это на сайте 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("[email protected]", false) == null)
{
users.CreateUserAndAccount("[email protected]", "P@ssw0rd53cR3t!");
roles.AddUsersToRoles(new[] {"[email protected]"}, new[] {"SuperAdmin"});
}
}
}
Когда я «Регистрирую пользователя», создается строка клиента, а также строка в таблице webpages_Membership, и обе они выглядят хорошо. Однако я могу зарегистрировать пользователя, только если я установлю точку останова в строке «var roles» выше и пропущу остальную часть метода.
Затем, с этим созданным пользователем, я не могу войти в систему - я получаю несоответствие пароля.
Если я НЕ пропускаю код, начинающийся с «var roles», я получаю исключение, которое: вы должны вызвать метод «WebSecurity.InitializeDatabaseConnection», прежде чем вызывать любой другой метод класса «WebSecurity».
Это расстраивает, так как вы можете ясно видеть, что я ДЕЙСТВИТЕЛЬНО вызываю этот метод. И после того, как он вызывается, я смотрю на него в своем окне Watch, и там говорится, что он инициализирован.
Итак, я застрял здесь.... Я хотел бы использовать это «Простое» членство, но, похоже, оно не позволяет мне использовать его просто!
Есть предположения? Я прочитал много статей, и кажется, что я все делаю правильно, но, очевидно, я что-то здесь упускаю...
Дополнительная информация: вот моя строка подключения, которая сопоставляется с DBRuWho.
<connectionStrings>
<add name="DBRuWho" connectionString="Server=localhost;Database=ruwho;integrated security=true" providerName="System.Data.SqlClient" />
I am pretty sure I am connecting properly, because the data gets inserted! I just can't seem to get past the exception when I check for !roles.RoleExists and I cannot get logged in.
Обновление. Я удалил все данные из своей таблицы Customer и все данные из таблицы webpages_Membership, и теперь (если я пропущу код !roles.RoleExists при запуске), я МОГУ войти в систему.
Однако при попытке чтобы выполнить код ролей для создания моего суперадминистратора, я все еще получаю исключение, которое я отметил выше.
WebSecurity.InitializeDatabaseConnection
все еще вызывается вInitialiseSimpleMembershipAttribute.cs
? - person MattSull   schedule 18.05.2013