7

我有一个 Access 应用程序,需要用户输入他们的 Windows 域用户和密码才能进入。我使用以下 VBA 代码来完成此操作:

Function WindowsLogin(ByVal strUserName As String, ByVal strpassword As String, ByVal strDomain As String) As Boolean
    'Authenticates user and password entered with Active Directory. 

    On Error GoTo IncorrectPassword

    Dim oADsObject, oADsNamespace As Object
    Dim strADsPath As String

    strADsPath = "WinNT://" & strDomain
    Set oADsObject = GetObject(strADsPath)
    Set oADsNamespace = GetObject("WinNT:")
    Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strDomain & "\" & strUserName, strpassword, 0)

    WindowsLogin = True    'ACCESS GRANTED

ExitSub:
    Exit Function

IncorrectPassword:
    WindowsLogin = False   'ACCESS DENIED
    Resume ExitSub
End Function

我注意到有时当信息输入正确时,访问被拒绝。我尝试调试一次,它给出了错误:“找不到网络路径。”就Set oADsObject = oADsNamespace.OpenDSObject)行了。

不知道为什么有时会发生这种情况。改为转换为 LDAP 会更好吗?我已尝试但无法正确构建 LDAP URL。

4

2 回答 2

5

如果用户已经通过他们的 Windows 登录进行了身份验证,为什么还要让他们再次输入详细信息?

如果你想知道哪个用户登录了,你可以很容易地通过下面的函数获取用户名:

声明函数 IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long

函数 GetUserName() 作为字符串

    出错时继续下一步

    将 sBuffer 作为字符串变暗
    将 lSize 变暗
    暗淡 x 长

    sBuffer = 空间$(32)
    lSize = Len(sBuffer)
    x = IGetUserName(sBuffer, lSize)
    GetUserName = left$(sBuffer, lSize - 1)

结束功能

于 2012-08-28T19:30:23.447 回答
0

在 GxP 环境中,至少还需要输入密码。您是否登录到 Windows 无关紧要,您需要再次确认。

于 2013-11-27T14:30:10.970 回答