2012-08-27 17 views
5

का उपयोग करके लॉगिन करें मेरे पास एक एक्सेस ऐप है जिसके लिए उपयोगकर्ता को अपने विंडोज डोमेन उपयोगकर्ता और पासवर्ड दर्ज करने की आवश्यकता है। मैं यह पूरा करने के निम्नलिखित 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) लाइन पर नेटवर्क पथ नहीं मिला।

यह सुनिश्चित नहीं है कि यह कभी-कभी क्यों होता है। क्या इसके बजाय एलडीएपी में परिवर्तित करना बेहतर है? मैंने कोशिश की है लेकिन एलडीएपी यूआरएल का सही ढंग से निर्माण नहीं कर सकता।

+1

मुझे नहीं पता कि आपके प्रश्न का उत्तर कैसे दिया जाए, लेकिन आपके कोड के साथ खेलना ऐसा लगता है कि जब तक एक वैध strUserName और strDomain पास होता है, तब भी जब तक पासवर्ड –

+0

होता है तो यह आपके फ़ंक्शन पर एक सत्य प्राप्त करता है एक हिट या मिस। अजीब सा व्यवहार। – Rick

+0

मैंने 'विकल्प तुलना डेटाबेस की तुलना में 'विकल्प तुलना बाइनरी' का उपयोग करके समाप्त किया है, तर्क है कि 'विकल्प डेटाबेस की तुलना करें' आपको सीएएसईएस –

उत्तर

3

यदि उपयोगकर्ता पहले से ही अपने विंडोज लॉगिन के माध्यम से प्रमाणीकृत है, तो उन्हें फिर से विवरण क्यों दर्ज करें?

आप को पता है जो उपयोगकर्ता के प्रवेश की जरूरत है, तो आप उपयोगकर्ता नाम बहुत आसानी से निम्नलिखित समारोह से प्राप्त कर सकते हैं:

 
Declare Function IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long 

Function GetUserName() As String 

    On Error Resume Next 

    Dim sBuffer As String 
    Dim lSize As Long 
    Dim x As Long 

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

End Function 

+0

+1 का अच्छा नियंत्रण नहीं देता है, इस तरह के दृष्टिकोण को साझा करने के लिए आपको बहुत बहुत धन्यवाद। –

0

GXP माहौल में यह अतिरिक्त जरूरत है कम से कम पासवर्ड डालने के लिए। इससे कोई फर्क नहीं पड़ता कि आप विंडोज़ में लॉग इन हैं, आपको इसे फिर से पुष्टि करने की आवश्यकता है।

संबंधित मुद्दे