Как изменить имя пользователя с помощью mvc4 и simplemembership

Почему вы не можете изменить простое имя пользователя? я пробовал

MembershipUser memUser = Membership.GetUser(existingUser);
memUser.UserName = model.UserName;
Membership.UpdateUser(memUser);

Я понимаю, что MembershipUser.UserName доступен только для чтения. Других доступных способов изменения имени пользователя нет.

Есть ли способ обойти эту проблему?

Изменить: новая проблема. Когда линия

 var confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName, Request["Password"], new { NameFirst = model.NameFirst, NameLast = model.NameLast, ContactId = newContact.ContactId },true);

запущен, я получаю MembershipCreateUserException и говорю, что имя пользователя уже используется (на самом деле это не так). Ему удается добавить пользователя в мою таблицу UserSecurity (UserProfile), но не добавляет его в таблицу членства. Он пытается добавить пользователя в таблицу webpages_Membership, а не в созданную мной таблицу UserMembership.


person zms6445    schedule 11.03.2013    source источник
comment
Я проголосовал за повторное открытие этого вопроса, потому что вопрос находится в контексте SimpleMembership, а не просто Membership.   -  person Mike Cole    schedule 18.09.2013


Ответы (1)


Возможно, вы не сможете редактировать имя пользователя с помощью MembershipProvider. В SimpleMembership вы должны добавить в свою модель таблицу UserProfile, в которой хранится имя пользователя.

Вы указываете таблицу при инициализации:

WebSecurity.InitializeDatabaseConnection("DBname", "UserProfileTable", "IdColumn", "UsernameColumn", autoCreateTables: true);
person kapsiR    schedule 11.03.2013
comment
Я думаю, вы также можете использовать его, создать таблицы SimpleMembership самостоятельно, а затем использовать инициализатор с autoCreateTables: false - но вы должны использовать ту же таблицу, которую провайдер simpleMembership создаст автоматически - person kapsiR; 11.03.2013
comment
Итак, будет ли достаточно создания только таблицы UserProfile, или я должен воссоздать все простые таблицы членства? Я не уверен, нужно ли мне делать что-то другое для таблицы, в которой хранятся пароли, путем хеширования. - person zms6445; 11.03.2013
comment
также ознакомьтесь с этими статьями: weblogs.asp.net/jgalloway/archive/2012/08/29/ blog.osbornm.com/2010/07 / 21 / - person kapsiR; 11.03.2013
comment
вам необходимо создать как минимум таблицу webpages_Membership и таблицу UserProfile, которые могут иметь другое имя - person kapsiR; 11.03.2013
comment
это также зависит от того, что вам нужно - если вам тоже нужны роли, вы должны создать больше - person kapsiR; 11.03.2013
comment
Ваш вопрос о хешировании: хеширование выполняется самим простым членством, а хеш хранится в webpages_Membership в виде строки (хешируется и солится с помощью System.Web.Helpers.Crypto.HashPassword) HashPassword делает это по RFC 2898 - person kapsiR; 11.03.2013
comment
Simplemembership - это просто мошенничество, чтобы заставить нас использовать еще одну технологию. В старом уже есть нужные столы, и он отлично работает. - person The Muffin Man; 11.03.2013
comment
Я уже слишком увлекся простым членством. Я почти закончил работу с ним для этого проекта, поэтому я буду придерживаться его. - person zms6445; 11.03.2013
comment
Привет, капси. Я столкнулся с проблемой. Я создал таблицы с разными именами, и ему удалось создать нового пользователя, lin eWEbSecurity.CreateUserandAccount создает пользователя и каждый раз выдает ошибку «Пользователь уже существует». Вы знаете, что не так? - person zms6445; 11.03.2013
comment
Я не понимаю вашей проблемы - вы можете предоставить дополнительную информацию или код ... - person kapsiR; 11.03.2013
comment
Я добавил код к своему вопросу - person zms6445; 11.03.2013
comment
Вы должны использовать таблицу webpages_Membership - иначе это не сработает. - person kapsiR; 12.03.2013