Вывести оригинальное имя пользователя Sitecore вместо того, что набрано в данный момент - PullRequest
0 голосов
/ 24 января 2011

Я мог бы упустить что-то очевидное здесь, но возможно ли вернуть пользователя 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);

Спасибо,

Аннели

1 Ответ

5 голосов
/ 24 января 2011

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

Строка кода, которую вы упомянули, на самом деле не идет в базу данных безопасности, чтобы получить пользователя.Он создает только объект 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).

...