当我只知道他们的电子邮件时,我可以查找用户活动目录登录吗?

时间:2013-04-25 00:40:01

标签: vb.net active-directory

我对AD知之甚少,但这就是我要做的事情和我听到的方向,我应该去。

我们让Active Directory中的用户在邮件字段中包含电子邮件地址。我想允许他们使用他们的电子邮件地址或正常登录来登录我们的网站。我的VB代码将检查他们是否输入了未格式化为电子邮件的文本并直接登录,或者如果格式化为电子邮件地址,我想使用该地址查找幕后登录信息。

我听说过DirectorySearcher是要走的路,但我没有运气实现它。我非常感谢任何帮助。

Dim theUser As String = String.Empty
Dim strDomain As String = "DEV"
Dim directoryEntryMTA As String = "LDAP://dc=dev,dc=ad,dc=mtaaccount"

            If Not String.IsNullOrEmpty(txtUsername.Text) Then
                If txtUsername.Text.IndexOf("@") > -1 Then
                    Dim entry As New DirectoryEntry(directoryEntryMTA)
                    Dim search As New DirectorySearcher(entry)
                    search.Filter = "mail=" & txtUsername.Text
                    search.PropertiesToLoad.Add("SAMAccountName")
                    Dim result As SearchResult = search.FindOne()

                    If result IsNot Nothing Then
                        theUser = strDomain + "\" + result.ToString()
                    Else
                        ' ADD CODE IF DIRECTORY SEARCHER DOES NOT FIND ANY USER WITH SUPPLIED EMAIL
                    End If
                Else
                    theUser = strDomain + "\" + txtUsername.Text
                End If
            End If

1 个答案:

答案 0 :(得分:0)

不确定你是否解决了这个问题,但试试这个:

If result IsNot Nothing Then
    '*** INSTEAD OF THIS ***
    'theUser = strDomain + "\" + result.ToString()

    '*** USE THIS ***
    theUser = strDomain + "\" + result.Properties("samaccountname").Item(0).ToString
Else
    ...

ToString对象上调用result方法将尝试将SearchResult对象转换为String,而不是您刚才在{1}}中指定的SAMAccountName属性search对象。您需要实际识别在search对象中定义的特定属性/属性和对象,并将其各个值转换为字符串(或整数,或日期时间等)