FBA显示名称与自定义成员资格提供程序WSS 3.0

时间:2009-12-14 03:30:59

标签: .net sharepoint moss wss-3.0 fba

我有一个WSS 3.0站点(没有MOSS),它使用自定义表单身份验证成员资格提供程序和角色管理器,根据远程Web服务对用户进行身份验证(尽管目前它对moq数据起作用)。我的问题是这样的:用户登录后的名字显示为他们的登录名,而不是他们的全名。

我设置了我的提供程序,以便存储用户名和全名,并且当被询问时(例如GetUserByUsername),任一值都将返回一个MembershipUser对象,其中Fullname作为用户名。这样做的结果是,在sharepoint人员选择器中,输入用户名称会导致自动完成将其变为全名,就像标准的Windows身份验证一样。

但是,对提供程序进行破坏,当登录到站点时,只调用提供程序上的ValidateUser方法,它们永远不会是我的doctored MembershipUser对象的请求。查看内容数据库中的UserInfo表,将创建一个新条目,并将用户名(tp_title)设置为其登录名。

没有对数据库运行直接查询(我不打算这样做)我不确定如何为自定义FBA用户提供用户友好的用户名。帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

没关系,找到了解决方法。在我的自定义成员资格提供程序的验证用户方法上,以下代码允许我设置name属性。当使用数千个用户时,这可能无法扩展,但对于小型用户群,它应该没问题:

public override bool ValidateUser(string username, string password)
    {
        if (moqUsers.Any(user => user.Username.Equals(username) && user.Password.Equals(password)))
        {
            SPContext.Current.Site.RootWeb.AllowUnsafeUpdates = true;
            var user = SPContext.Current.Site.RootWeb.EnsureUser(username);
            user.Name = RetrieveUserFullName(username);
            user.Update();
            SPContext.Current.Site.RootWeb.AllowUnsafeUpdates = false;
            return true;
        }
        return false;
    }

此外,上面可能需要很好地处理rootweb。

答案 1 :(得分:0)

我在ValidateUser期间尝试了很多让上面的代码工作,我认为这是更新UserInfo.tp_Title的好时机(除非您每次都要更新它)用户登录的时间,但是,嘿,你打算做什么?)。

但是,我无法让EnsureUser运行(也尝试过AllUsers[])而不会抛出错误。试图在SPSecurity.RunWithElevatedPrivileges下的匿名代表和所有人中执行。没有骰子。

但是,我认为这是完全正确的想法,我只是想分享一下我的工作方式是通过调用SP UserGroup网络服务(/_vti_bin/usergroup.asmx ),调用UpdateUserInfo。我的确切方法签名如下所示:

UserGroup.UpdateUserInfo("custommembershipprovidername:" + username, TheFullName,
 emailAddress, string.Empty)