2

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

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

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

我怎样才能使这个要求起作用?

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

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

http://omaralzabir.com/how_to_change_user_name_in_asp_net_2_0_membership_provider/

4

3 回答 3

3

所以这就是我能够更改用户名的方式。这一切都发生在用于更新各种用户数据的 post 操作方法中。

首先我检查用户名是否已经存在。“信息”是来自视图的模型对象。

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);

我希望这可以帮助那里的人。

于 2013-06-27T22:25:21.057 回答
2

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

于 2013-05-23T19:47:53.557 回答
0

您可以执行以下步骤

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

更多细节在这里

于 2013-05-24T10:16:29.560 回答