Wic*_*ams 3 asp.net-membership sitecore membership-provider
我正在尝试为sitecore实现一个非常简单的MembershipProvider,但我不确定它是否太简单而无法实际工作.基本上我们已经有一个用户数据的自定义商店,所以我知道客户MembershipProvider
是要走的路.但是我的应用程序不会记录任何人,系统的不同部分负责.此外,它并不关心究竟是谁登录,只关注它们是否是(我的网站内容区域中的哪个部分无关紧要).
那么最好的方法是什么呢?我在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
}
Run Code Online (Sandbox Code Playgroud)
实现一个成员提供者是你需要的很多工作.如果我是你,我会实现一个场景,每当有人需要登录时你就创建一个虚拟用户.所以逻辑是检查用户是否有你的令牌,然后创建一个虚拟用户,记录虚拟用户和你应该好好去.
这是一个虚拟用户的指南: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)
Run Code Online (Sandbox Code Playgroud)
编辑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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我第一次点击前端时输出以下内容:
外联网\匿名虚假外联网\ jenneren真
我第二次到达前端时得到:
extranet\jenneren真正的外网\ jenneren真的
所以它应该工作.干杯Jens
归档时间: |
|
查看次数: |
1532 次 |
最近记录: |