ЧленствоПоставщик в sitecore - PullRequest
3 голосов
/ 23 августа 2011

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

Итак, как лучше всего это сделать? Мне передают токен в заголовке HTTP, который позволяет мне определить, вошел ли кто-то в систему или нет (я мог бы даже использовать это, чтобы фактически узнать, кто является клиентом, если я так хочу) - не волнуйтесь, это зашифровано.

Я прочитал документы sitecore, но все они имеют дело с полной реализацией MembershipProvider s.

Так возможно ли на самом деле иметь поставщика членства, который делает только это, то есть возвращает либо пользователя для обозначения входа в систему, либо "анонимного" пользователя для тех, кто вышел из системы? это не должно быть связано ни с чем другим - сброс пароля, поиск пользователей по электронной почте и все такое прочее.

Спасибо, Ник

РЕДАКТИРОВАТЬ: с помощью Jens ниже я отказался от полномасштабного MembershipProvider в пользу более легкого подхода.

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

public class TokenLogin : HttpRequestProcessor
{


    #region Overrides of HttpRequestProcessor

    /// <summary>
    /// Processes the specified args.
    /// </summary>
    /// <param name="args">The args.</param>
    public override void Process(HttpRequestArgs args)
    {
        var customer = SomeCodeToParseAndValidateToken();

        //customer is null if token is invalid or missing
        if(customer == null || Sitecore.Context.User.IsAuthenticated) return;

        CreateVirtualUser(customer);
    }

    private static void CreateVirtualUser(CustomerAccount customer)
    {
        string userName = "extranet\\" + customer.CustomerAccountId;

        User userItem = AuthenticationManager.BuildVirtualUser(userName, true);   
        userItem.Profile.Initialize(userName, true);    
        userItem.Profile.Save();

        AuthenticationManager.Login(userItem.Name);
    }

    #endregion
}

1 Ответ

8 голосов
/ 23 августа 2011

Реализация membershipprovider - большая работа для того, что вам, похоже, нужно.Если бы я был вами, я бы реализовал сценарий, в котором вы создаете виртуального пользователя каждый раз, когда кто-то должен войти в систему. Поэтому логика будет состоять в том, чтобы проверить, есть ли у пользователя ваш токен, затем создать виртуального пользователя, зарегистрировать виртуального пользователя иВы должны быть хорошими, чтобы пойти.

Вот руководство для виртуального пользователя thingie: http://sdn.sitecore.net/Articles/Security/Faking%20user%20roles/Virtual%20user.aspx

РЕДАКТИРОВАТЬ: код в ссылке не рекомендуется.Вот как вы добавляете виртуальных пользователей:

   userName = "extranet\\"+userName    
   User userItem = AuthenticationManager.BuildVirtualUser(userName, true);   
   userItem.Profile.Initialize(userName, true);    
   userItem.Profile.Email = userName + "@yourdomain.com";   
   userItem.Profile.Save();

   AuthenticationManager.Login(userItem.Name)

РЕДАКТИРОВАТЬ 2: У меня есть следующий код:

    public class TestVirtualUserProcessor : HttpRequestProcessor
    {


      public override void Process(HttpRequestArgs args)
      {
        HttpContext.Current.Response.Write(Sitecore.Context.User.Name + "<br/>");
        HttpContext.Current.Response.Write(Sitecore.Context.User.IsAuthenticated + "<br/>");

        CreateVirtualUser("jenneren");

        HttpContext.Current.Response.Write(Sitecore.Context.User.Name + "<br/>");
        HttpContext.Current.Response.Write(Sitecore.Context.User.IsAuthenticated + "<br/>");
        }

      private static void CreateVirtualUser(string name)
      {
        string userName = "extranet\\" + name;

        User userItem = AuthenticationManager.BuildVirtualUser(userName, true);
        userItem.Profile.Initialize(userName, true);
        userItem.Profile.Save();

        AuthenticationManager.Login(userItem.Name);
      }


    }

Это выводит следующее, когда я впервые прихожу в веб-интерфейс:

экстрасеть \ Anonymous False extranet \ jenneren True

И во второй раз, когда я нажимаю на интерфейс, я получаю:

extranet \ jenneren True extranet \ jenneren True

должно сработать.Ура Дженс

...