使用基于声明的身份验证的 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);
我收到错误:代号为“[email protected]”的用户已经存在。
这发生在 SetUserInfo 行上。所以我认为必须有另一种方法来正确更新用户名。
你需要做几件事:
检查用户是否已经存在:
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
}
我敢打赌用户名是保留的或无效的,这就是它不保存的原因。您完成的作业应该可以正常工作。
看起来您也在全局处理程序中执行此更新,因此这可能会导致一些问题。因此,您可能必须稍后执行该用户名更新,或者只是将记录写入自定义表,然后根据在自定义表中创建这些记录的事件从那里更新它。
因此,我将调试您的代码并通过将其从全局事件处理程序中删除来验证它是否正常工作,如果它有效,那么一次发生太多事情是一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句