Домен пользователя sitecore и роли с нулевым значением

У меня есть настройка sitecore с внешней страницей входа для пользователей экстрасети, чтобы получить доступ к закрытым страницам на сайте.

В настоящее время пользователи экстрасети входят в систему с постоянным флагом

global::Sitecore.Security.Domains.Domain domain = global::Sitecore.Context.Domain;
var isLogginedIn = AuthenticationManager.Login(domain + @"\" + email, password, true);

Это работает успешно, и контекст установлен правильно.

Ниже выводится из непосредственного окна после входа в систему в рамках того же запроса.

global::Sitecore.Context.User.Domain
extranet

global::Sitecore.Context.User.Roles.Count()
1

global::Sitecore.Context.User.IsAuthenticated()
true

После входа в систему пользователь перенаправляется на страницу, к которой он хотел получить доступ.

Ниже выводится окно непосредственного вывода любых последующих запросов.

global::Sitecore.Context.User.Domain
null

global::Sitecore.Context.User.Roles.Count()
0

global::Sitecore.Context.User.IsAuthenticated()
true

У кого-нибудь есть идеи, почему я могу потерять некоторые элементы контекста при последующих запросах?

заранее спасибо

3 ответа

Это скорее патч, чтобы скрыть эту проблему, а не правильное решение, но я опубликую кого-либо только на тот случай, если у кого-то еще появятся какие-либо идеи по этому поводу.

Я вызываю следующий код во время пользовательского конвейера

if (user.Domain == null && user.IsAuthenticated)
{
   var domainUser = string.Format(@"extranet\{0}", user.LocalName);
   var membershipUser = Membership.GetUser(domainUser);

   if (membershipUser != null)
   {
      AuthenticationManager.Login(domainUser, membershipUser.GetPassword(), true);
   }
}

После этого у пользователя правильно установлены домен и роли. Как ни странно, все остальные запросы после этого имеют правильно настроенного пользователя.

У меня была именно эта проблема, когда домен пуст, а роли пустые. Причиной было то, что я использовал элемент управления asp:Login для входа в систему. Когда я заменил его на стандартные элементы управления Text, Password и Button, проблема исчезла.

Похоже, вы пытаетесь создать свою собственную страницу входа для Sitecore. В этом случае вы можете попробовать начать logginging трубопровод вместо вызова AuthenticationManager.Login метод:

var loggingInArgs = new LoggingInArgs
{
    Username = userName,
    Password = password,
    StartUrl = startUrl
};

Pipeline.Start("loggingin", loggingInArgs);
bool isLogginedIn = loggingInArgs.Success;
Другие вопросы по тегам