2009-10-01 78 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