2009-08-04 122 views
20

我有一個使用ASP.net成員資格提供程序的asp.net網站。數據庫中的每條評論,條目等均由用戶ID進行跟蹤。ASP.NET用戶名更改

由於MS不提供更改用戶名的方法,因此我在數據庫的「用戶」表中找到了userNAME,並且只有1個用戶名出現的位置。

我的問題是,

是否安全,提供「編輯個人資料」頁面,用戶可以編輯自己的用戶名。當然,我會通過直接更改數據庫中的「用戶名」值在後臺處理此更改。

這是否有任何缺點?我創建並修改了一些測試帳戶,似乎沒什麼問題,我只是想知道在投入生產之前是否有任何已知的負面信息。

+0

我們應該檢查拳頭是否存在任何外鍵http://stackoverflow.com/a/1374315/413032。如果不存在,我們應該問((如果有人使用它並且沒有密鑰),那麼我們可以更新用戶並觀察將會發生什麼。 – 2013-05-16 07:01:58

回答

14

cptScarlet的鏈接很好,但是我不喜歡使用存儲過程,如果我不需要,我會盡可能地支持Entity Framework。這是我做了更改用戶名,使用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. 單擊Finish

現在你可以添加代碼來創建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會員數據庫,所以如果您有多個應用程序,則需要對此進行說明。