2011-01-24 35 views
0

我可能忽略了這裏顯而易見的一些東西,但是有可能返回一個Sitecore用戶,並在註冊時使用他們使用的大寫字母的用戶名?顯示原始的Sitecore用戶名,而不是當前輸入的內容

目前用戶名將顯示爲用戶在登錄時輸入的內容,但我希望能夠獲得原始字符串。

我使用User user = User.FromName(domainUser, false);

UPDATE: 這是我結束了後燕的出色答卷:

// get the MembershipUser object normally by name 
var initialUser = Membership.GetUser(domainUser, false); 
if (initialUser != null) 
{ 
    // get the same MembershipUser by Id - in this case it retuns username in correct case 
    initialUser = Membership.GetUser(initialUser.ProviderUserKey, false); 
} 

// get the Sitecore user from the username in correct case 
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(initialUser.UserName, false); 

感謝,

Annelie

回答

5

這是一個有趣的問題,深入挖掘這一點非常有趣。

您提到的代碼行實際上並沒有進入安全數據庫以獲取用戶。它只會用你提供的名稱創建一個User對象。您可以參考低級ASP.NET類System.Web.Security.Membership。它包含多次重載的方法GetUser。訣竅是它接受用戶名作爲參數的重載版本的行爲與User.FromName相同。我的意思是它不會從底層SQL表中返回實際的UserName,而是使用您在參數中傳遞給GetUser方法的用戶名。它仍然正常工作 - 所有比較都以小寫形式完成。

因此,如果您需要獲取用戶名的實際大小寫,則可以使用其中一種實際查詢UserName字段的基礎SQL源的方法。例如,GetUser(object, bool),它通過用戶ID得到用戶:

// get the MembershipUser object normally by name 
    var user = Membership.GetUser(@"sitecore\admin", false); 
    if (user != null) 
    { 
    // get the same MembershipUser by Id - in this case it retuns username in correct case 
    user = Membership.GetUser(user.ProviderUserKey, false); 
    // use the user.UserName value as you wish 
    Response.Write(user.UserName); 
    } 

正如你可以看到,這是2個調用數據庫,而不是1 Membership.GetUser(username)和,而不是0 User.FromName(username)

或者,如果您確定用戶有電子郵件,並且您知道此電子郵件,則可以使用Membership.GetUserNameByEmail(email)方法。

+0

非常感謝!現在工作正常。 :) – annelie 2011-01-25 11:17:08

相關問題