ASP.NET MVC4 WebMatrix WebSecurity Forms身份验证:更改用户名

时间:2013-05-20 13:40:48

标签: asp.net-mvc forms-authentication security

我正在将WebMatrix WebSecurity用于我的应用程序的表单身份验证。

用户需要能够更改其用户名,而无需注销。

我应该调用WebSecurity.Logout(),然后是WebSecurity.Login()就可以了,但Login()需要密码。当然,我无法提供此密码,因为它在数据库中进行了哈希处理。

如何使此要求有效?

编辑: 以下是有关如何解决更改用户名问题的一些建议。

然而,我的实际问题是cookie仍然保留旧用户名。我找到了关于如何处理的以下说明:

http://omaralzabir.com/how_to_change_user_name_in_asp_net_2_0_membership_provider/

3 个答案:

答案 0 :(得分: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 :(得分:1)

由于WebMatrix WebSecurity是通过UserId而非Username完成的,只需更改存储用户数据的表中的数据,然后将其重定向到新页面。您无需将其注销并重新登录,我相信新用户名将立即被提取。

答案 2 :(得分:0)

您可以执行以下步骤

  1. 通过UserId或UserName获取UserDetails
  2. 更改用户名
  3. 现在通过调用SimpleMembershipProvider.UpdateUser
  4. 来更新用户数据

    更多详情here