【问题标题】:Change Username ASP.net MVC 3 Membership更改用户名 ASP.net MVC 3 成员资格
【发布时间】:2012-09-07 00:41:56
【问题描述】:

我正在运行一个 ASP.net MVC 3 Web 应用程序,并使用 Membership Provider。我想知道是否可以允许用户(或管理员)更改现有帐户的用户名?我还没有找到一种方法来做到这一点。用户名不是电子邮件地址,但在我尝试分配新名称之前验证了其唯一性。

任何帮助将不胜感激!

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-membership


    【解决方案1】:

    会员提供者不提供更新用户名的方法。您将需要扩展成员资格提供程序 UpdateUser 方法或直接与成员资格表交互以允许此更改。无论您如何处理,请记住一些事项

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

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

    【讨论】:

    • 如何重新发布 AuthenticationTicket cookie?猜测一下,我建议调用 FormsAuthentication.SetAuthCookie(),但也许你知道?
    • 是的 - 你明白了。基本上,这将创建一个新的 auth cookie 并将其与响应一起发送回来,覆盖以前的 auth cookie。我能想到的唯一可能导致某人出现问题的事情是 cookie 上的过期时间将被重置。
    • 我使用新用户名(并将 createPersistentCookie 设置为 false)调用它,但我发现旧用户名和新用户名都不能用于登录。有什么想法吗?
    • 嗯...这是两个不同的问题。重新签发身份验证票时无需重新登录。您已经对用户进行了身份验证,您只是在重置身份验证票的用户名部分。至于无法使用新用户名实际登录,您需要检查您的用户存储(db)并确保它更新了用户名,没有更改密码,没有“停用”用户等。跨度>
    • 按照您的建议查看了我的用户存储并发现了问题。我的问题是,在更新用户时,我无意中用未散列的版本更新了密码,因此登录时验证失败。糟糕!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多