Изящный способ ссылки на элемент в клиенте Sitecore?

#sitecore #sitecore6

#sitecore #sitecore6

Вопрос:

Я ищу наилучший способ ссылки на элемент в клиенте Sitecore (не на внешний веб-сайт). Ссылка будет встроена в электронное письмо с отчетом о неработающих ссылках. Пользователь должен иметь возможность щелкнуть ссылку и запустить редактор содержимого Sitecore с этим элементом, автоматически выбранным в дереве.

Я нашел решение Марка Урсино в его блоге здесь, но, к сожалению, оно работает только в том случае, если вы активно вошли в Sitecore (в противном случае после входа в систему вы попадаете на рабочий стол Sitecore).

Я запускаю Sitecore.NET 6.4.1 (rev. 110324)

Обновить

Просто чтобы закрыть цикл в решении Марко:

 public void Process(LoggedInArgs args)
{
    string url = HttpUtility.UrlDecode(WebUtil.GetQueryString("url"));

    // Ensure we're dealing with the client login site and there is a URL to redirect to
    if (Sitecore.Context.GetSiteName() == "login" amp;amp;
        !String.IsNullOrEmpty(url))
    {
        var queryString = WebUtil.ParseQueryString(url);

        // Check for redirect param to prevent accidental redirections 
        if (queryString.ContainsKey("redirectAfterLogin"))
                WebUtil.Redirect(url);
    }
}
  

Ответ №1:

Вы хотели бы иметь единую страницу, на которую указывают все ваши ссылки, которые обрабатывают вход в систему, а затем перенаправляют на Sitecore. Вы хотели бы добавить несколько параметров строки запроса к URL ссылок в электронном письме, таких как: ItemId и serialCode. Я настоятельно рекомендую, из-за последствий для безопасности такого рода действий, настроить зашифрованный код, который можно отправлять по ссылкам, которые могут быть незашифрованными, и сверить с сохраненным кодом для этого конкретного отчета, чтобы убедиться, что человек, пытающийся войти в систему, является тем, кому вы отправили электронное письмо. После проверки кода вы получите доступ к учетным данным пользователя низкого уровня, которые вы могли бы сохранить в своем web.config для автоматического входа в систему. Затем вы должны использовать ItemId, чтобы определить, какой элемент открывать в редакторе содержимого. (Обратите внимание, что обход процесса входа в систему Sitecore откроет дыры в системе безопасности, от которых вы должны быть готовы защищаться)

Другим менее сложным и более безопасным вариантом было бы отправить по электронной почте резюме и уведомление о новом отчете со ссылкой на страницу входа в Sitecore. Затем создайте пользовательское приложение в Sitecore для создания и просмотра этих отчетов. Затем предполагаемый получатель электронного письма может войти в систему и использовать это приложение для просмотра его, когда он получит уведомление. Это было бы похоже на то, как работает средство просмотра журналов. Оказавшись в режиме рабочего стола Sitecore, они могут переключаться между редактором контента и вашим пользовательским приложением, которое затем может иметь список ссылок на все элементы. Это, конечно, зависит от гибкости вашего клиента.

Ответ №2:

Вот что я использовал раньше:

В sitecore web.config есть опция отправки через необработанные URL-адреса. Установите это при использовании этого файла исправления

 <setting name="Authentication.SaveRawUrl">
  <patch:attribute name="value">true</patch:attribute>
</setting>
  

Затем я добавил дополнительный процессор в процессор loggedin после CleanupUserProfile, который считывает параметры querystring и перенаправляет на соответствующую страницу. Этот процессор вызывается каждый раз, независимо от того, входил пользователь в систему ранее или нет.

Подпись для моего пользовательского процессора, вошедшего в систему, является

 namespace [...]
{
    public class LoginModeSwitcher
    {
        public void Process(LoggedInArgs args)
        {
            // your code here
        }
    }
}
  

Это конфигурация исправления, которую я использовал для зарегистрированного процессора:

 <processors>
  <loggedin>
    <processor patch:after="*[@type='Sitecore.Pipelines.LoggedIn.CleanupUserProfile, Sitecore.Kernel']" mode="on" type="[...].LoginModeSwitcher, [ASSEMBLY]" />
  </loggedin>
</processors>
  

Ссылки в ссылке электронной почты содержат параметр querystring, указывающий моему коду, который мы хотим перенаправить после входа в систему, и другие параметры querystring, указывающие, куда перенаправлять пользователя.

Комментарии:

1. Итак, это кажется очень, очень близким. Но я не понимаю, как будет выглядеть URL, который я бы передал процессору. Если я знаю идентификатор элемента, на который я хотел бы создать ссылку в клиенте Sitecore, какой URL-адрес я бы передал?

2. @corey, вы можете передать в качестве URL все, что хотите, интерпретация параметров URL зависит от кода вашего процессора. Итак, вы можете включить GUID элемента в качестве параметра, например, ваша строка запроса может выглядеть следующим образом amp;myItem=[GUID]amp;myOpen=workbox , и процессор будет искать параметр myItem и / или parameter myOpen и использовать их для выполнения любой логики, которая ему необходима.

Ответ №3:

Я думаю, что самым простым решением на сегодняшний день было бы просто создать свою собственную страницу входа. Вход в Sitecore по умолчанию не выполняет ничего такого, что вы не могли бы легко выполнить самостоятельно на новой странице… тот, который затем автоматически перенаправляет пользователя на соответствующий элемент в редакторе содержимого.

По сути, это то же самое, что и первое предложение mstiles, за вычетом процесса автоматического входа в систему. Это всего лишь ожидающее своего часа нарушение безопасности … не делайте этого.