2009-10-01 76 views
2

任何人都知道如何獲取用戶的簡短用戶名,例如。 「約翰史密斯」,給出他們的全名,例如。 「約翰·史密斯」?從全名獲取簡短用戶名

注意我對任何用戶感興趣,而不是當前用戶,所以像NSUserName這樣的函數是不相關的。

爲什麼?我正在使用授權服務驗證用戶名和密碼。這允許人們輸入他們的短名或全名,這很好,但是我需要知道他們實際登錄的人是誰(即短用戶名和/或用戶ID)。

像[NSHomeDirectoryForUser(用戶名)lastPathComponent]惡劣的黑客不一致工作。

回答

6

您需要使用Collaboration Framework :)。 鏈接這個框架到您的項目,然後你只需要做到以下幾點:

CBIdentity* identity = [CBIdentity identityWithName:@"John Smith" authority:[CBIdentityAuthority localIdentityAuthority]]; 
NSLog(@"Posix name: %@", [identity posixName]); 

,瞧!

編輯:如果您只需要找到綁定在網絡上的用戶,則需要使用+managedIdentityAuthority而不是+localIdentityAuthority。 如果您需要查找本地用戶和網絡用戶,請使用+defaultIdentityAuthority

+0

+1我從來沒有聽說過這個框架! – 2009-10-01 23:31:26

+0

完美,謝謝。我相信蘋果的文檔可以更容易地找到這些東西。 當我問到這個問題後,我發現getpwnam()會這樣做,但很高興有這個認可的方法。我敢打賭getpwnam不會做網絡用戶。 – Adrian 2009-10-01 23:43:27

+0

getpwnam()通過DirectoryServices執行網絡用戶。然而,關於CBIdentity的好處是你可以指定兩者,或者(或者,你可能只想檢查本地用戶,或者只檢查網絡用戶)。 另外,CBIdentity允許您通過全名,短名稱,電子郵件地址或別名搜索身份,這非常方便:)。 – 2009-10-01 23:48:14