Отображать исходное имя пользователя Sitecore вместо введенного в данный момент

Возможно, я упускаю из виду что-то очевидное здесь, но возможно ли вернуть пользователя Sitecore с именем пользователя с заглавными буквами, которые они использовали при регистрации?

На данный момент имя пользователя будет отображаться как то, что пользователь ввел при входе в систему, но я хотел бы иметь возможность получить исходную строку.

Я использую User user = User.FromName(domainUser, false);

ОБНОВЛЕНИЕ: вот что я получил после отличного ответа Яна:

// 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);

Спасибо,

Аннели


person annelie    schedule 24.01.2011    source источник


Ответы (1)


Это интересный вопрос, и было интересно копнуть глубже.

Упомянутая вами строка кода на самом деле не обращается к базе данных безопасности, чтобы получить пользователя. Он создает только объект User с указанным вами именем.

Вы можете обратиться к классу ASP.NET более низкого уровня System.Web.Security.Membership. Он содержит метод GetUser, который несколько раз перегружается. Хитрость в том, что его перегруженная версия, которая принимает имя пользователя в качестве параметра, ведет себя так же, как User.FromName. Я имею в виду, что он не возвращает фактическое UserName из базовой таблицы SQL, а использует имя пользователя, которое вы передали в параметрах методу GetUser. Он по-прежнему работает корректно — все сравнения выполняются в нижнем регистре.

Итак, если вам ДЕЙСТВИТЕЛЬНО нужно получить реальный регистр имени пользователя, вы можете использовать один из методов, которые фактически запрашивают базовый источник SQL для поля UserName. Например, GetUser(object, bool), который получает пользователя по UserId:

  // 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).

person Yan Sklyarenko    schedule 24.01.2011
comment
Большое спасибо! Теперь работает нормально. :) - person annelie; 25.01.2011