经过各种研究,发现问题在于Dim obj As Object = entry.NativeObject这个语句已经对用户输入的用户名和密码做.NativeObject属性绑定adsobject。如果输入的用户名和密码是正确的,则adsobject绑定成功。可以通过这个语句程序继续往下走,如果用户输入的用户名或者密码是错误的,则在这一步就不能通过。所以导致错误。程序不会往下继续执行。也不会判断什么返回result
Is Nothing返回什么false状态了。
这是我个人测试出来的结果和理解。不知道对不对。如果我的推断是正确的。那么,不明白网上的这个代码下面部分还有什么意义?绑定adsobject都通不过。还怎么去判断result
Is Nothing???
原本看到这段代码,理解为是先链接ldap的ad账户。然后在ad库里面寻找用户输入的用户名和密码看是不是匹配。经过测试看来其实不是。而是直接用用户输入的用户名和密码链接ad库进行绑定adsobject,如果用户名密码正确。绑定ok。如果不正确,直接绑定失败。所以根本不用后续代码来判断什么result
Is Nothing了。
网上所找原来代码:
Public Function Authed(ByVal username
As String,
ByVal pwd As String)
As Boolean
Dim entry
As DirectoryEntry = New DirectoryEntry(_path, username, pwd)
Dim obj
As Object = entry.NativeObject
Dim search
As DirectorySearcher = New DirectorySearcher(entry)
search.Filter
= "(SAMAccountName=" & username
& ")"
Dim result
As SearchResult = search.FindOne()
If result
Is Nothing Then
Return
False 'ad验证失败
Else
Return
True 'ad验证通过
End If
End
Function
改为:
Public Function Authed(ByVal username
As String,
ByVal pwd As String)
As Boolean
Dim entry
As DirectoryEntry = New DirectoryEntry(_path, username, pwd)
try
Dim obj
As Object = entry.NativeObject ‘这里就开始用用户名和密码绑定了
Return true'ad验证ok
catch ex as exception ’如果绑定不成功导致出错了。说明输入的用户名或者密码不正确。直接返回验证失败
Return
false'ad验证失败
End If
End
Function
经过测试。在我的domain内成功。 分享下。
nn