Kentico 10 - 如何更新现有用户的用户名?

时间:2017-11-02 06:25:55

标签: kentico

使用基于声明的身份验证的kentico 10网站。我们有能力更新外部系统中的电子邮件地址。所以我想要做的是通过查找基于我们sso平台的外部用户ID来更新用户的电子邮件地址和用户名。

var existingUser = UserInfoProvider.GetUsers().Where("ExternalGuid", QueryOperator.Equals, userId).FirstOrDefault();

if (existingUser.IsInSite(SiteContext.CurrentSiteName))
    UserInfoProvider.RemoveUserFromSite(existingUser.UserName, SiteContext.CurrentSiteName);

loggingInUser = UserInfoProvider.GetUserInfo(existingUser.UserID);
loggingInUser.UserName = e.UserName;

UserInfoProvider.SetUserInfo(loggingInUser);

我收到错误: 代号为' ac.aa@test.com'已经存在。

这在SetUserInfo行上发生。因此,我认为必须有另一种方法来正确更新用户名。

2 个答案:

答案 0 :(得分:1)

尝试使用SetValue(string columnName,value)方法,我刚测试了这个方法,它运行良好:

UserInfo updateUser = UserInfoProvider.GetUserInfo("NewUser");
    if (updateUser != null)
    {
        // Updates the user's properties
        updateUser.SetValue("UserName", "NewUserName");

        // Saves the changes to the database
        UserInfoProvider.SetUserInfo(updateUser);
    }

对于某些属性/列,其行为类似于“只读”,您需要使用SetValue方法,就像它是自定义字段(API示例)

答案 1 :(得分:1)

你需要做一些事情:

检查用户是否已存在:

UserInfo ui = UserInfoProvider.GetUserInfo(newUserName);
if (ui != null)
{
  // user exists with new username so don't continue
}

检查用户名是否可用作用户名(无空格,特殊字符等):

if (!ValidationHelper.IsUserName(newUserName))
{
  // username cannot be used as a username
}

检查用户名是否保留:

if (UserInfoProvider.NameIsReserved(siteName, newUserName))
{
  // reserved username so cannot use it
}

我愿意打赌用户名是保留的还是无效的,这就是为什么它没有保存。你所做的任务应该没有问题。

看起来您在全局处理程序中执行此更新,因此这可能会导致一些问题。因此,您可能必须稍后执行该用户名更新,或者只是将记录写入自定义表,然后根据在自定义表中创建这些记录的事件从那里更新它。

所以我通过你的代码进行调试,并通过从全局事件处理程序中删除它来验证它是否正常工作,如果它有效,那么这就是一次发生太多事情的问题。