ASP.NET用户名更改

时间:2009-08-04 20:21:50

标签: asp.net asp.net-membership

我有一个使用ASP.net会员提供商的asp.net网站。用户ID跟踪DB中的每个注释,条目等。

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

我的问题是,

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

这有什么缺点吗?我创建并修改了一些测试帐户,看起来没问题,我只是想知道在投入生产之前是否存在任何已知的负面因素。

1 个答案:

答案 0 :(得分:14)

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. 将Model Namespace更改为MembershipModel
  9. 点击完成
  10. 现在您可以添加代码来创建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成员资格数据库的应用程序,所以如果你有多个应用程序,你需要考虑到这一点。