2009-12-14 114 views
2

我有一個WSS 3.0網站(無MOSS)使用自定義窗體身份驗證的成員資格提供程序和角色管理,驗證用戶對遠程Web服務(儘管目前它的工作原理對moq數據)。我的問題是這樣的:登錄時用戶的名字顯示爲他們的登錄名,而不是他們的全名。FBA顯示名稱與定義成員資格提供,WSS 3.0

我設置了我的提供程序,以便存儲用戶名和全名,並且在詢問時(例如GetUserByUsername)這兩個值中的任何一個都將返回一個以Fullname作爲用戶名的MembershipUser對象。其優點是在SharePoint人員選取器,輸入用戶在自動完成用戶名結果把它變成自己的全名,很像標準的Windows驗證確實的效果。

然而,設置斷點提供商,登錄到該供應商的網站只的ValidateUser方法被調用的時候,他們從來都不是我的篡改對象的MembershipUser的請求。看着在內容數據庫中的新條目均設置爲登錄名的用戶名(tp_title)創建用戶信息表。

短期對數據庫運行(這我不打算這樣做)我不確定我怎麼能有自定義FBA用戶提供用戶友好的用戶名直接查詢。幫助將不勝感激。

回答

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的。

+0

我在將用戶添加到SharePoint時執行相同的步驟。 – Kusek 2009-12-14 05:13:25

0

我在ValidateUser期間嘗試了很多工作以獲得上述代碼,我認爲這是更新UserInfo.tp_Title的好時機(除了可能每次用戶登錄時要更新它,嘿,你打算怎麼做?)。

但是,我無法獲得EnsureUser的功能(也試過AllUsers[])而沒有發生錯誤。嘗試在SPSecurity.RunWithElevatedPrivileges以及全部的匿名代理中執行。沒有骰子。

事情是,雖然,我認爲這是完全正確的想法,我想和大家分享的是我得到了它的工作方式是通過對SP UserGroup Web服務(/_vti_bin/usergroup.asmx)呼叫,稱UpdateUserInfo。我的確切方法簽名看起來像這樣:

UserGroup.UpdateUserInfo("custommembershipprovidername:" + username, TheFullName, 
emailAddress, string.Empty) 
相關問題