gpt4 book ai didi

asp.net-membership - sitecore 中的基本 MembershipProvider

转载 作者:行者123 更新时间:2023-12-02 02:19:09 24 4
gpt4 key购买 nike

我正在尝试为 sitecore 实现一个非常非常简单的 MembershipProvider,但我不确定它是否太简单而无法实际工作。基本上我们已经有一个用于用户数据的自定义存储,所以我知道客户 MembershipProvider 是可行的方法。然而,我的应用程序不会让任何人登录,系统的不同部分负责这一点。此外,它并不关心到底是谁登录,只关心他们是否登录(谁部分与我网站的内容区域无关)。

那么解决这个问题的最佳方法是什么?我在 HTTP header 中传递了一个 token ,它允许我识别某人是否已登录(如果我愿意,我什至可以使用它来实际找出客户是谁) - 不用担心它已加密。

我已经阅读了 sitecore 文档,但它们都涉及 MembershipProvider 的完整实现。

那么实际上是否有可能有一个成员(member)提供者只做这件事,即返回一个用户来表示正在登录,或者返回一个“匿名”用户来表示那些已注销的用户?它不需要关心任何其他事情 - 密码重置、通过电子邮件查找用户以及所有这些爵士乐。

谢谢,尼克

编辑:在下面 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
}

最佳答案

实现成员(member)资格提供者需要做很多工作才能满足您的需求。如果我是你,我会实现一个场景,每次有人需要登录时,你都会创建一个虚拟用户。因此,逻辑是检查用户是否拥有您的 token ,然后创建一个虚拟用户,登录该虚拟用户,然后您就可以开始了。

这是有关虚拟用户的指南: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);
}


}

我第一次访问前端时会输出以下内容:

外联网\匿名错误的外联网\jenneren正确

当我第二次访问前端时,我得到:

外联网\jenneren真的外联网\jenneren正确

所以它应该可以工作。干杯延斯

关于asp.net-membership - sitecore 中的基本 MembershipProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7159731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com