2011-01-24 39 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

相关问题