mis*_*dan 13 membership sitecore
我在Sitecore的核心数据库中创建了一个自定义用户配置文件模板和对象(根据Security API Cookbook).
我可以通过编程方式选择(根据安全API手册),以便我的外联网用户拥有扩展的个人资料,涵盖所有常见的嫌疑人(地址,电话,电子邮件格式等)
但是,这些数据存储在哪里?如果我想查询数据库以根据此配置文件数据返回用户子集,如何访问它.
外联网成员系统的典型要求是提取要在电子邮件或电话类型活动中联系的用户列表.这可以通过Sitecore会员系统完成吗?
更新> 我将猜测并说配置文件数据存储在aspnet_Profile.PropertyValuesBinary ..这将使它几乎不可能查询,不适合我的目的.那是不幸的.那么为了扩展我的问题,如果是这样的话,是否可以让Sitecore将这些值存储在文本字段中以便可以搜索?
Yan*_*nko 11
SqlProfileProvider的标准Microsoft实现(默认情况下在Sitecore中使用)将用户配置文件信息存储在aspnet_Profile表中.所有属性都被序列化到PropertyNames/PropertyValuesString列中.PropertyValuesBinary用于存储二进制数据(图像).如果查看System.Web.Profile.SqlProfileProvider,SetPropertyValues方法的代码,可以找到更多详细信息.
接下来,您在用户配置文件中定义的所有自定义属性都被序列化为Profile类的SerializedData属性,并且它再次像任何其他属性一样序列化到PropertyNames/PropertyValuesString列.
此外,一些属性存储在aspnet_Membership表中(出于某种原因) - 电子邮件和评论.
因此,如果您要通过电子邮件查询用户,则可以使用MembershipProvider的FindUsersByEmail方法.否则,如果您打算按另一个属性值进行过滤,我想,您必须获取所有用户并过滤获得的集合.
希望这可以帮助.
我上周遇到了这个确切的问题,没有提出永久的解决方案,但为了解决我的特定问题,我写了一个小帮助页面并将其添加为Sitecore应用程序,以便从CMS界面访问.所有这一切都是查询所有用户,并确定他们是否分配了任何类似的5-6个配置文件属性.
var userList = Sitecore.Security.Accounts.UserManager.GetUsers();
Run Code Online (Sandbox Code Playgroud)
这是获取用户的相关行,它返回Sitecore.Common.IFilterable
因此,如果您需要执行某些操作来获取所有用户的个人资料信息,您可以执行以下操作:
foreach (Sitecore.Security.Accounts.User user in userList)
{
Sitecore.Security.UserProfile profile = user.Profile;
string whatever = profile["Whatever"];
//add whatever to a list or something
}
Run Code Online (Sandbox Code Playgroud)
这对我的目的来说非常好,但我不知道在你的情况下它会有多可行.