2013-05-20 5 views
2

Я использую WebMatrix WebSecurity для проверки подлинности своих приложений.ASP.NET MVC4 Проверка подлинности веб-формы WebMatrix WebSecurity: изменение имени пользователя

Пользователь должен иметь возможность изменить свое имя пользователя, не выходя из системы.

Я предположил, что вызывается WebSecurity.Logout(), а затем WebSecurity.Login() будет делать трюк, но Login() требует пароля. Конечно, я не могу предоставить этот пароль, поскольку он хэшируется в БД.

Как я могу заставить это требование работать?

EDIT: Ниже приведены несколько рекомендаций по устранению проблемы смены имени пользователя.

Однако, моя фактическая проблема заключалась в том, что файл cookie по-прежнему содержит старое имя пользователя. Я нашел следующие инструкции о том, как справиться с этим:

http://omaralzabir.com/how_to_change_user_name_in_asp_net_2_0_membership_provider/

ответ

1

С WebMatrix WebSecurity осуществляется через UserId, а не имя пользователя, просто изменить данные в таблице вы храните свои UserData, и затем перенаправить их на новую страницу. Вам не нужно выходить из системы и возвращаться, я верю, что новое имя пользователя будет немедленно отобрано.

+0

Я отмечу это как ответ, потому что он наиболее точно решает мою первоначальную проблему. – Bertvan

+0

Не выбрал новое имя для меня. Я добавил http://stackoverflow.com/a/17354255/267740 – Julian

0

Вы можете сделать следующие шаги

  1. Получить UserDetails от UserId или UserName
  2. Измените UserName
  3. Теперь обновить пользовательские данные, вызвав SimpleMembershipProvider.UpdateUser.

Подробнее here

+0

Возможно, это путь, но я не могу понять, как вызвать этот метод из действия Controller? – Bertvan

+0

OK, есть Membership.GetUser() и Membership.UpdateUser(), MemberShip.UserName - свойство readonly. – Bertvan

+0

Извините, API не позволяет изменить имя пользователя. Это можно сделать только через SP. Пожалуйста, обратитесь к этому сообщению [в середине страницы у нас есть образец] http://www.4guysfromrolla.com/articles/070109-1.aspx – Saravanan

3

Так вот как я в состоянии изменить имя пользователя. Это происходит внутри метода post action для обновления всех видов пользовательских данных.

Сначала я проверяю, существует ли имя пользователя. «info» - это модельный объект, исходящий из представления.

if (WebSecurity.CurrentUserName != info.UserName && 
    this.userRepository.Find(info.UserName) != null) 
{ 
    ModelState.AddModelError("", "This email is already taken."); 
    return View(); 
} 

Затем я обновляю базу данных.

UserProfile user = this.userRepository.Find(info.UserId); 
user.UserName = info.UserName; 
this.userRepository.SaveUser(user); 

Тогда вот волшебная часть. Вы должны сбросить файл cookie авторизации.

FormsAuthentication.SetAuthCookie(user.UserName, false); 

Я надеюсь, что это поможет кому-то там.

+1

Вы правы, это волшебство. Настройка Auth Cookie работала отлично. Благодаря! – PeteK68

+0

Работал для меня. Благодаря! – Julian

Смежные вопросы