- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 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/
情况是这样的: 我们有几个 (19) 个站点当前配置为使用不同的应用程序名称共享单个 ASP 成员(member)数据库,例如: 我的问题是,如果在 web.con
正如我在 VS2012 调试器中看到的,方法 Membership.GetUser() 首先尝试创建表“应用程序”(使用 CREATE TABLE NonQuery),得到表已经存在的异常,然后为我返
我目前正在用 .Net 重写整个网站。当前网站使用foxpro编写,使用自定义逻辑、验证规则和Sql server表来存储和验证用户。 我想使用 Membership Provider,但我有一个主要
我的系统有不同的用户, super 管理员、管理员、成员、匿名用户。 在某些页面中,我只希望管理员用户登录。如果成员登录,我不想将它们重定向到目标 URL。 如何停止重定向? 最佳答案 我不记得 na
我有一个 SQL 脚本,可以在我的数据库中创建用户。它使用.Net 成员资格存储过程。 此时一切正常。 唯一的问题是密码保存为明文。我应该在此处更改什么以使其加盐/加密(不确定此处使用什么术语) GO
如何在 ASP.NET Web 应用程序项目中不使用 Membership.GetUser(username) 的情况下访问 ASP.NET Membership 中的 UserId? UserId
我正在开发一个使用 Facebook 的网站。现在,为了管理用户,我想到了使用 MembershipProvider 并选择开发自定义成员(member)提供程序。我的问题是我的数据库架构与标准成员架
我正在尝试编写一个简单的 Gui 来生成随 secret 码。我尝试使用的代码是: 使用 System.Web.Security; Password_txtBx.Text = Membership.G
测试集合中是否存在以另一个元组开头的元组的 pythonic 方法是什么?实际上,我真的在匹配索引之后,但我可能可以从测试示例中找出 例如: c = ((0,1),(2,3)) # (0,) shou
为什么 memcached 中存在硬编码块限制(压缩后 .5 兆) ?有没有人重新编译他们的?我知道我不应该发送这样的大块,但是这些超重的块不时发生在我身上并造成严重破坏。 最佳答案 这个问题曾经在o
我正在将代码移出 App_Code进入类库。 我使用 Membership.CreateUser 以编程方式创建用户. 在无法访问我在 web.config 中配置的成员资格提供程序的情况下,如何在我
我的 web.config 允许最多 10 次密码尝试失败。但我想在 5 次失败后添加验证码。 我如何获得成员(member)资格甚至自定义函数的失败尝试次数? 最佳答案 此资源在这里 http://
我正在尝试完成一个程序来帮助我在类里面学习 Java 之前学习它。但我在尝试向俱乐部添加成员(member)、打印出来然后计算成员(member)数量时遇到了困难。将基础知识添加到代码中后,我不知道从
我有这个代码: MembershipUser user = Membership.GetUser(model.UserName); if (user != null) user.IsAppro
Membership.ApplicationName 是一个静态字符串。 我的问题是,如果我想更改此值以查询同一数据库上另一个 应用程序的成员资格,则更改是永久性的,这意味着当前站点的应用程序名称现已
我正在使用表单例份验证,我想将某些页面限制为某些角色。现在每个人都可以在登录后访问整个应用程序。 但我想将某些页面限制为某些角色。例如,“查看日志”页面。 我认为我的 web.config 文件应该如
我正在使用 System.Web.Sercurity.Membership 方法来处理我们网络服务的用户。在测试期间我对它非常满意,因为我们的数据库和 Web 服务驻留在同一台服务器上。 当数据库和
Membership.DeleteUser() 设法删除我要删除的用户的用户配置文件。为什么它不同时删除存储在 webpages_membership 中的信息。 我目前没有使用角色,所以请记住这一点
我的应用程序中的许多地方都需要 GUID (UserId)。目前我正在调用 Membership.GetUser() 来获取 UserId。此方法是进行数据库调用还是缓存详细信息? 如果它进行数据库调
当我使用 Membership.DeleteUser(userName, false) 时,没有任何反应。但是当我使用 Membership.DeleteUser(userName, true) 或
我是一名优秀的程序员,十分优秀!