2009-07-07 47 views
1

ASP.NET成員系統使用唯一的用戶名來標識用戶。如果我需要通過電子郵件登錄用戶該怎麼辦?以Email登錄的個人檔案系統/成員系統

我可以將電子郵件傳遞到用戶名的屬性,但事情會變得有點混亂。用戶可能想要更改電子郵件地址。

有沒有可用的資源來描述實現它的好方法?

回答

2

您使用電子郵件地址作爲用戶名的方法適用於我。但你說得對;當電子郵件地址被改變時,它確實變得混亂。我們採取的方法是,當用戶希望更改他們的電子郵件地址時,我們也更改他們的用戶名。唯一的方法就是通過直接的數據庫操作。我們小心地確保對用戶的任何引用都是通過UserId完成的;這確保了用戶名的改變並沒有破壞任何東西。

下面是我們使用的代碼,以防您感興趣。該代碼位於持久類中,該類包裝MembershipUser類並以一對一關係存儲。只要忽略邪惡的SQL字符串構建並做更好的事情;)

IDbCommand cmd = connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = string.Format(
    "UPDATE dbo.aspnet_Users SET UserName = '{0}', LoweredUserName = '{0}' WHERE UserId = '{1}'", 
    DatabaseManager.SqlEscape(value.ToLower()), this.Id); 
cmd.ExecuteNonQuery(); 

cmd = connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = string.Format(
    "UPDATE dbo.aspnet_Membership SET Email = '{0}', LoweredEmail = '{0}' WHERE UserId = '{1}'", 
    DatabaseManager.SqlEscape(value.ToLower()), this.Id); 
cmd.ExecuteNonQuery();