如何将自定义配置文件分配给sitecore中的自定义域用户

时间:2016-04-15 06:47:55

标签: sitecore asp.net-membership sitecore8

我正在尝试使用sitecore 8.1中的代码创建自定义域的用户。我成功地使用以下代码创建用户:

[HttpPost]
    public string RegisterUser(SurveyMonkeyUser userInfo)
    {
        string userId = "0";
        string Domain = "website"; //to be taken from config
        string ProfileItemId = "{7D473841-D585-43F6-9DF4-400313D945EC}"; //to be taken from config

        if (!AccountExists(Domain + userInfo.Username))
        {
            string domainUser = string.Concat(Domain ,@"\", userInfo.Username.Replace(" ",""));
            var user = Sitecore.Security.Accounts.User.Create(domainUser , "pass123");

            user.Profile.ProfileItemId = ProfileItemId;
            user.Profile.SetCustomProperty("FirstName", userInfo.FirstName);
            user.Profile.SetCustomProperty("LastName", userInfo.LastName);
            user.Profile.SetCustomProperty("Email", userInfo.Email);
            user.Profile.SetCustomProperty("DateOfBirth", userInfo.DateOfBirth);
            user.Profile.SetCustomProperty("Gender", userInfo.Gender);
            user.Profile.SetCustomProperty("Location", userInfo.Location);
            user.Profile.SetCustomProperty("Occupation", userInfo.Occupation);
            user.Profile.SetCustomProperty("SectorEmployment", userInfo.SectorEmployment);
            user.Profile.SetCustomProperty("Salary", userInfo.Salary);
            user.Profile.SetCustomProperty("MaritalStatus", userInfo.MaritalStatus);
            user.Profile.SetCustomProperty("MobileNumber", userInfo.MobileNumber);

            user.Profile.Save();
            user.Profile.Reload();
            var username = user.Name;
            userId  = "Account Created Successfully " + user.Name;                
        }
        else
        {
            userId = "user already exist";
        }


        return userId;
    }

但是它的自定义属性在sitecore的后端不可见,但在调试期间,我可以看到使用Sitecore.Security.Accounts.User.FromName(@"website\SyedAhsanJaffri",true).Profile.SerializedData创建了所有用户的个人资料我得到了所有属性

Count = 13
    [0]: {[digestcredentialhash, a287effab21c2ec84696e4eef4ca2171]}
    [1]: {[digestcredentialhashwithoutdomain, 767c0012faf8e872581d3ac5919db895]}
    [2]: {[FirstName, Syed Ahsan]}
    [3]: {[LastName, Jaffri]}
    [4]: {[Email, username@xxxxx.com]}
    [5]: {[DateOfBirth, 14/08/1985]}
    [6]: {[Gender, Male]}
    [7]: {[Location, Karachi]}
    [8]: {[Occupation, Software Engineer]}
    [9]: {[SectorEmployment, IT]}
    [10]: {[Salary, 351212]}
    [11]: {[MaritalStatus, Single]}
    [12]: {[MobileNumber, 923312190031]}

在后端我必须手动更改自定义配置文件:)才能查看我的属性。

2 个答案:

答案 0 :(得分:5)

您可以打开App_Config \ Securiry \ Domains.config并在那里配置默认配置文件项ID,例如:

<domain name="CommerceUsers" defaultProfileItemId="{0FFEC1BD-4D35-49CF-8B7D-7F01930834ED}" ensureAnonymousUser="false" />

P.S。但是你的代码看起来是正确的。我想知道你的不行。确保您传输正确的ID。仔细检查您是否从Core数据库传输了配置文件项的ID(而不是配置文件模板的ID)。

答案 1 :(得分:2)

我通常使用user.Profile.SetPropertyValue("ProfileItemId", ProfileItemId);代替user.Profile.ProfileItemId = ProfileItemId;。除此之外,我在代码和我的(工作)版本之间可以看到的唯一区别是我在设置配置文件之后和设置自定义属性之前执行了保存操作(user.Profile.Save();)。

另外,就像Anton已提到的那样:确保ProfileItemId是配置文件项的ID(位于/ sitecore / system / Settings / Security / Profiles /...)