我正在将WebMatrix WebSecurity用于我的应用程序的表单身份验证。
用户需要能够更改其用户名,而无需注销。
我应该调用WebSecurity.Logout(),然后是WebSecurity.Login()就可以了,但Login()需要密码。当然,我无法提供此密码,因为它在数据库中进行了哈希处理。
如何使此要求有效?
编辑: 以下是有关如何解决更改用户名问题的一些建议。
然而,我的实际问题是cookie仍然保留旧用户名。我找到了关于如何处理的以下说明:
http://omaralzabir.com/how_to_change_user_name_in_asp_net_2_0_membership_provider/
答案 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)
您可以执行以下步骤
SimpleMembershipProvider.UpdateUser
。更多详情here