【问题标题】:ASP.NET username changeASP.NET 用户名更改
【发布时间】:2009-08-04 20:21:49
【问题描述】:

我有一个使用 ASP.net Membership 提供程序的 asp.net 站点。数据库中的每个评论、条目等都由用户 ID 跟踪。

由于 MS 没有提供更改用户名的方法,我在数据库的“用户”表中找到了用户名,并且用户名出现的位置只有 1 个。

我的问题是,

提供允许用户编辑自己的用户名的“编辑个人资料”页面是否安全。当然,我会通过直接更改数据库中的“用户名”值来在后台处理此更改。

这有什么缺点吗?我已经创建并修改了一些测试帐户,看起来还不错,我只是想知道在将其投入生产之前是否有任何已知的负面影响。

【问题讨论】:

  • 我们应该检查stackoverflow.com/a/1374315/413032是否存在任何外键。如果不存在,我们应该问(:如果有人使用它并且没有密钥。然后我们可以更新用户并观察会发生什么。

标签: asp.net asp.net-membership


【解决方案1】:

cptScarlet 的链接很好,但是如果我不需要,我鄙视使用存储过程,并且我尽可能倾向于使用实体框架。以下是我使用 EF 4.0 和 .NET 4.0 更改用户名的操作:

  1. 右键项目->添加新项->ADO.NET实体数据模型
  2. 给它一个合适的名字,我选择“MembershipModel.edmx”并点击添加
  3. 选择从数据库生成并单击下一步
  4. 将连接添加到您的“aspnetdb”数据库(ASP.NET 成员数据库)
  5. 给它一个合适的名字,我选择了“MembershipEntities”
  6. 点击下一步
  7. 深入表并选择 aspnet_Users
  8. 将模型命名空间更改为 MembershipModel
  9. 点击完成

现在您可以添加代码来创建 EF 对象上下文并修改数据库:

public void ChangeUserName(string currentUserName, string newUserName)
{
    using (var context = new MembershipEntities())
    {
        // Get the membership record from the database
        var currentUserNameLowered = currentUserName.ToLower();
        var membershipUser = context.aspnet_Users
            .Where(u => u.LoweredUserName == currentUserNameLowered)
            .FirstOrDefault();

        if (membershipUser != null)
        {
            // Ensure that the new user name is not already being used
            string newUserNameLowered = newUserName.ToLower();
            if (!context.aspnet_Users.Any(u => u.LoweredUserName == newUserNameLowered))
            {
                membershipUser.UserName = newUserName;
                membershipUser.LoweredUserName = newUserNameLowered;
                context.SaveChanges();
            }
        }
    }
}

注意:我没有在我的代码中考虑应用程序 ID。我通常只有一个应用程序使用 ASP.NET 成员数据库,因此如果您有多个应用程序,则需要考虑到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多