Я пытаюсь реализовать действительно очень простой 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
}