2016-01-28 4 views
0

Я использую CFLDAP для аутентификации пользователей с использованием активного каталога. Я пытаюсь написать оператор if в случае, если информация пользователя не возвращается как заверенная. Я думал, что могу проверить, используя <cfif AuthenticateUser.RecordCount gt 0>, который работает до тех пор, пока информация верна, но если введена неправильная информация и ничего не аутентифицировано, она не запускает инструкцию else. Любая помощь с этим будет принята с благодарностью!Если запрос Else пуст

<cfldap action="query" 
       name="AuthenticateUser" 
       attributes="dn,mail,givenname,sn,samaccountname,memberof" 
       start="DC=domain,DC=net" 
       filter="(&(objectclass=user)(samAccountName=#trim(form.user_name)#))" 
       server="servername" 
       Port="389" 
       username="tc\#trim(form.user_name)#" 
       password="#trim(form.user_pass)#"> 
<cfoutput>#AuthenticateUser.RecordCount#</cfoutput> 
<!--- Get all records from the database that match this users credentials ---> 
<cfquery name="userVerify" datasource="test"> 
    SELECT * 
    FROM dbo.Users 
    WHERE user_name = <cfqueryparam value="#AuthenticateUser.samaccountname#" cfsqltype="cf_sql_varchar" /> 
</cfquery> 
<cfif AuthenticateUser.RecordCount gt 0> 
    <!--- This user has logged in correctly, change the value of the session.allowin value ---> 
    <cfset session.allowin = "True" /> 
    <cfset session.employee_number = userVerify.employee_number /> 

    <!--- Now welcome user and redirect to "index.html" ---> 
    <script> 
     self.location="../dashboard/dashboard.cfm"; 
    </script> 
<cfelse> 
    <!--- this user did not log in correctly, alert and redirect to the login page ---> 
    <script> 
     alert("Your credentials could not be verified, please try again!"); 
     self.location="Javascript:history.go(-1)"; 
    </script> 
    </cfif> 

Я также попытался: <cfif len(AuthenticateUser)> enter image description here

+0

Что содержит AuthenticateUser, когда это происходит? Какова цель другого запроса, то есть userVerify? – Leigh

+0

, когда он аутентифицируется, когда он захватывает всю активную информацию каталога, когда введен неправильный логин, он просто пуст. userVerify в основном сопоставляет аутентифицированное имя с базой данных sql, получая все данные пользователей, такие как номер сотрудника и все. Многие вещи, которые не находятся в активном каталоге –

+0

, поэтому, когда я ввожу правильное имя пользователя и пароль, оно будет продолжаться и перейти к моей cfm панели управления, но когда я напечатаю неверную информацию, я просто получаю белый экран, и я ничего не показываю при сбросе authenticateuser –

ответ

1

Я думаю, что это порождает ошибку при сбое запроса. Попробуйте это:

<cftry> 
    <cfldap action="query" 
       name="AuthenticateUser" 
       attributes="dn,mail,givenname,sn,samaccountname,memberof" 
       start="DC=domain,DC=net" 
       filter="(&(objectclass=user)(samAccountName=#trim(form.user_name)#))" 
       server="servername" 
       Port="389" 
       username="tc\#trim(form.user_name)#" 
       password="#trim(form.user_pass)#"> 
    <cfset LoginStatus = "Success"> 
    <cfcatch type="any"> 
     <cfset LoginStatus = "Failed"> 
    </cfcatch> 
</cftry> 

Тогда ваш Cfif будет что-то вроде этого:

<cfif LoginStatus eq "Success"> 
    <!--- This user has logged in correctly, change the value of the session.allowin value ---> 
    <cfset session.allowin = "True" /> 
    <cfset session.employee_number = userVerify.employee_number /> 

    <!--- Now welcome user and redirect to "index.html" ---> 
    <script> 
     self.location="../dashboard/dashboard.cfm"; 
    </script> 
<cfelse> 
    <!--- this user did not log in correctly, alert and redirect to the login page ---> 
    <script> 
     alert("Your credentials could not be verified, please try again!"); 
     self.location="Javascript:history.go(-1)"; 
    </script> 
</cfif> 

Я думаю, что это работает на CF9.

+0

Это также не работает должным образом, если введены неправильные учетные данные. Он работает, если введены правильные учетные данные, хотя –

+0

попытался метать # LoginStatus # и он просто показывает пустой белый экран с неправильными учетными данными, но показывает успех для правильных учетных данных –

+0

Я не понимаю, что я действительно не lol –

2

Это отформатированные комментарий. Вы пытаетесь сделать слишком много сразу. Пойдите шаг за шагом. Начать с этого:

<cfdump var="before cfldap tag<br />"> 

<cfldap action="query" 
      name="AuthenticateUser" 
etc 
> 
<cfdump var="after cfldap tag<br />"> 
<cfdump var = "#AuthenticateUser#"> 
<cfdump var="after cfdump<br />"> 

Запустите этот код с действительными и недопустимыми учетными данными. Посмотрите, что вы получаете. Реагировать соответственно.

+0

То же самое происходит с неправильной информацией пустой белый экран, правильная информация отображает dn, givenname, mail, memberof, samaccountname, sn –

+0

Вы говорите, что не знаете Не видите строку текста после cfdump? Попробуйте с 3 cfdumps. –

+0

поэтому, когда я запускаю как правильные, так и неправильные учетные данные, это все, что показывает 'before cfldap tag
' –

2

Вот как я это делаю. Я пытаюсь запустить запрос в отношении нашего домена, используя предоставленное имя пользователя и пароль. Если введенное имя пользователя и пароль недопустимы, генерируется ошибка.

<cftry> 
    <cfldap action="Query" 
     name="ADResult" 
     attributes="dn" 
     start="DC=domain,DC=net" 
     filter="sAMAccountName=administrator" 
     server="servername" 
     scope = "subtree" 
     username="#arguments.username#" 
     password="#arguments.password#" /> 

    <cfset isAuthenticated = true /> 
<cfcatch type="any"> 
    <cfset isAuthenticated = false /> 
</cfcatch> 
</cftry> 

<cfreturn isAuthenticated /> 

Я завершаю это функцией под названием «аутентифицировать» и выставляю ее через веб-службу, которую я вызываю из своих приложений. Если мне тогда понадобятся дополнительные сведения о пользователе (mail, givenName и т. Д.), У меня есть еще одна функция в той же веб-службе, которую я буду вызывать после того, как я уверен, что пользователь аутентифицирован. Обратите внимание, что в этой другой функции я использую имя пользователя и пароль администратора для выполнения запроса.

<cfldap action="Query" 
    name="ADResult" 
    attributes="mail,givenName" 
    start="DC=domain,DC=net" 
    filter="sAMAccountName=#arguments.username#" 
    server="servername" 
    scope = "subtree" 
    username="administrator" 
    password="myAdminPassword" /> 

Я беру результаты этого, заполняя объект запроса или структуру и возвращаю его вызывающей функции.

Так что весь процесс своего рода выглядит следующим образом:

<cfset objAD = createobject("webservice", "http://mywebservice.com") /> 
<cfset isAuthenticated = objAD.authenticate(form.username, form.password) /> 
<cfif isAuthenticated> 
    <cfset userDetails = objAD.getUserDetails(form.username)> 
</cfif> 

Надеется, что это помогает.

Смежные вопросы