ASP.net MVC 3 Membership如何更改用户名

5
我正在运行一个ASP.net MVC 3 Web应用程序,并使用Membership Provider。我想知道是否有可能允许用户(或管理员)更改现有帐户的用户名?我还没有找到方法来实现这个功能。该用户名不是电子邮件地址,但在我尝试分配新名称之前需要验证其唯一性。
任何帮助都将不胜感激!
1个回答

7

成员提供程序没有提供更新用户名的方法。您需要扩展成员提供程序的UpdateUser方法或直接与成员表进行交互以允许此更改。无论您如何处理此问题,请记住以下几个要点:

  1. 在更新时,您需要检查用户名的唯一性,就像创建用户时发生的情况一样。

  2. 如果用户已登录并更改了其用户名,则您需要强制他们注销并重新登录或重新发布AuthenticationTicket cookie。原因是,如果他们更改了用户名,则存储的authTicket cookie的用户名和实际的用户名不再匹配。如果您使用HttpContext.Identity.User.Name查询数据存储或检查对内容的授权,您将不再返回任何结果,因为该用户名不再存在。


1
是的 - 你明白了。基本上,这将创建一个新的身份验证 cookie,并将其与响应一起发送回去,覆盖之前的身份验证 cookie。我唯一能想到可能会给某些人带来问题的是,cookie 的过期时间将被重置。 - Tommy
我使用新的用户名调用了它(并将createPersistentCookie设置为false),但我发现既不能使用旧的用户名也不能使用新的用户名进行登录。有什么想法吗? - Ciaran Gallagher
是的,从登录表单开始。我假设一旦重新发行身份验证票证,使用新用户名的登录将成功。 - Ciaran Gallagher
1
好的...这是两个不同的问题。当您重新发行授权票据时,无需重新登录。您已经对用户进行了身份验证,只需重置身份验证票据的用户名部分即可。至于无法使用新用户名实际登录,您需要检查用户存储(数据库)并确保它更新了用户名,未更改密码,未“停用”用户等。 - Tommy
1
按照你的建议查看了我的用户存储,并找到了问题所在。我的问题是在更新用户时,无意中使用了未经哈希处理的密码版本进行更新,因此在登录时验证失败。哎呀!感谢你的帮助! - Ciaran Gallagher
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接