Foros del Web » Programando para Internet » ASP Clásico »

Generar Public Function con un trozo de código

Estas en el tema de Generar Public Function con un trozo de código en el foro de ASP Clásico en Foros del Web. Hola a tod@s; a ver si podeis ayudarme... Buscando por los foros encontré un código asp para hacer login validando contra LDAP. La página desde ...
  #1 (permalink)  
Antiguo 06/05/2010, 03:10
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 10 meses
Puntos: 2
Generar Public Function con un trozo de código

Hola a tod@s; a ver si podeis ayudarme...

Buscando por los foros encontré un código asp para hacer login validando contra LDAP. La página desde la que se ejecuta el código funciona perfectamente...

Para poderlo reutilizar en otras aplicaciones, quiero meter dicho codigo en una funcion de ASP, y llamarla cuando la necesite desde otras páginas. Tengo el típicofichero 'funciones.asp' con varias de ellas...

Pero algo debo hacer mal al convertir el código mencionado en una 'public function', porque cuando la llamo desde mi página, la función da siempre valor '0' (es decir, valor de incorrecto).

el código originario -que ya digo que funciona cuando va sólo en una página propia- es el siguiente: (quito la parte html, y dejo solo los que va entre <% %>)

Código asp:
Ver original
  1. <%
  2.  
  3. strUsername = "MiUser"
  4. strpassword = "Mipassw"
  5. domainname = "MIDominio"
  6.  
  7. on error resume next
  8.  
  9. Set objDomain = GetObject ("GC://rootDSE")
  10. objADsPath = objDomain.Get("defaultNamingContext")
  11. Set objDomain = Nothing
  12. Set objConnection = Server.CreateObject("ADODB.Connection")
  13. objConnection.provider ="ADsDSOObject"
  14. objConnection.Properties("User ID") = domainname+"\" + strUsername
  15. objConnection.Properties("Password") = strpassword
  16. objConnection.open "Active Directory Provider"
  17. Set objCommand = CreateObject("ADODB.Command")
  18. Set objCommand.ActiveConnection = objConnection
  19. objCommand.CommandText ="select cn FROM 'GC://"+objADsPath+"' where sAMAccountname='"+strUsername+"'"
  20. Set objRS = objCommand.Execute
  21.  
  22. If Err.Number <> 0 Then
  23. ldap = 0
  24. Response.write("Usuario o contraseña incorrecto")
  25. Else
  26. ldap = 1
  27. Response.write("Usuario o contraseña logado correctamente")
  28. End If
  29. RESPONSE.WRITE("<P>")& LDAP &"<p>"
  30.  
  31. %>


Pues bien, con este código, reescibo la siguiente función... que no funciona (y no funciona aunque le ponga los valores 'a pedal' y no sacados del form...):

Código asp:
Ver original
  1. PUBLIC FUNCTION ValidaLdap(strUsername,strpassword,domainname)
  2.  
  3. on error resume next
  4.  
  5. Set objDomain = GetObject ("GC://rootDSE")
  6. objADsPath = objDomain.Get("defaultNamingContext")
  7. Set objDomain = Nothing
  8. Set objConnection = Server.CreateObject("ADODB.Connection")
  9. objConnection.provider ="ADsDSOObject"
  10. objConnection.Properties("User ID") = domainname+"\" + strUsername
  11. objConnection.Properties("Password") = strpassword
  12. objConnection.open "Active Directory Provider"
  13. Set objCommand = CreateObject("ADODB.Command")
  14. Set objCommand.ActiveConnection = objConnection
  15. objCommand.CommandText ="select cn FROM 'GC://"+objADsPath+"' where sAMAccountname='"+strUsername+"'"
  16. Set objRS = objCommand.Execute
  17.  
  18. If Err.Number <> 0 Then
  19. ldap = "0"
  20. 'Response.write("Usuario o contraseña incorrecto")
  21. Else
  22. ldap = "1"
  23. 'Response.write("Usuario o contraseña logado correctamente")
  24. End If
  25. 'RESPONSE.WRITE("<P>")& LDAP &"<p>"
  26.  
  27. ValidaLdap=ldap
  28.  
  29. end function


Al incio de mi página donde uso la función va el include, ya para llamarla hago un

response.write "pasa: "&ValidaLdap(MiUser,MiPassw,MiDominio)

en donde, todoas las variables están perfectamente válidas...

y no se que hago mal...

Gracias por contestar!!!
  #2 (permalink)  
Antiguo 06/05/2010, 04:17
Avatar de Wasper  
Fecha de Ingreso: julio-2006
Ubicación: de cai, picha!!!
Mensajes: 1.030
Antigüedad: 17 años, 9 meses
Puntos: 41
Respuesta: Generar Public Function con un trozo de código

Puede ser porque el valor que mandas en ldap es:
Código ASP:
Ver original
  1. If Err.Number <> 0 Then
  2. ldap = 0
  3. Response.write("Usuario o contraseña incorrecto")
  4. Else
  5. ldap = 1

y en el otro codigo lo mandas con ""

¿Puede ser? Compruebalo...
__________________
Saludos, Jose

Paginas web y SEO
Anuncios por palabras
  #3 (permalink)  
Antiguo 06/05/2010, 05:56
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Generar Public Function con un trozo de código

Hola!
Gracias por contestar...
Los dos response.write que hay en código de la función están desactivados (comentados): los dejé en el código para acordarme de que 0=incorrecto y 1=correcto.

En el otro código (la página que llama a la función) la llamada a la función es:
Código ASP:
Ver original
  1. <%
  2. Dim Logado
  3. Dim User
  4. Dim Passw
  5. Dim Dominio
  6.  
  7. User= "yomismo"
  8. Passw= "loquesea"
  9. Dominio= "midominioLdap"
  10.  
  11. Logado= ValidaLdap(user,Passw,Dominio)
  12.  
  13. If logado =1 then
  14.  
  15. response.write("LOgin OK")
  16.  
  17. else
  18.  
  19. Response.write("Login Incorrecto")
  20.  
  21. end if
  22.  
  23. %>

por supuesto los tres valores (User, Pass y Dominio) son correctos: cuando uso el código originario de la página de donde la saqué , hace login correcto...

En dicho código, 'ldap' es una variable privada, que se usa para calcular si el login es correcto... Yo la convierto en variable pública en la última linea de la función:

'validaldap = ldap'

pero no funciona...



Logado=



Cita:
Iniciado por Wasper Ver Mensaje
Puede ser porque el valor que mandas en ldap es:
Código ASP:
Ver original
  1. If Err.Number <> 0 Then
  2. ldap = 0
  3. Response.write("Usuario o contraseña incorrecto")
  4. Else
  5. ldap = 1

y en el otro codigo lo mandas con ""

¿Puede ser? Compruebalo...
  #4 (permalink)  
Antiguo 06/05/2010, 09:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Generar Public Function con un trozo de código

Cómo que no funciona?

Claro que lo hace

Código ASP:
Ver original
  1. <&#37;
  2. FUNCTION ValidaLdap(strUsername,strpassword,domainname)
  3.  
  4. Set objDomain = GetObject ("GC://rootDSE")
  5. objADsPath = objDomain.Get("defaultNamingContext")
  6. Set objDomain = Nothing
  7. Set objConnection = Server.CreateObject("ADODB.Connection")
  8. objConnection.provider ="ADsDSOObject"
  9. objConnection.Properties("User ID") = domainname+"\" + strUsername
  10. objConnection.Properties("Password") = strpassword
  11. objConnection.open "Active Directory Provider"
  12. Set objCommand = CreateObject("ADODB.Command")
  13. Set objCommand.ActiveConnection = objConnection
  14. objCommand.CommandText ="select cn FROM 'GC://"+objADsPath+"' where sAMAccountname='"+strUsername+"'"
  15.  
  16. on error resume next
  17.  
  18. Set objRS = objCommand.Execute
  19.  
  20. If Err.Number <> 0 Then
  21. ldap = 0
  22. Else
  23. ldap = 1
  24. End If
  25. ValidaLdap = ldap
  26.  
  27. End Function
  28.  
  29. if Request("login") <> "" Then
  30.    if ValidaLdap(Request("login"), Request("password"), Request("dominio")) Then
  31.         response.write "Correcto"
  32.      else
  33.         response.write "Incorrecto"
  34.    end if
  35. End if
  36.  
  37. %>
  38.  
  39.  
  40. <html>
  41. <body>
  42. <form method=post>
  43.   Login:&nbsp; <input type="text" name="login"    value=""><br>
  44.     Password:&nbsp; <input type="password" name="password" value=""><br>
  45.     Dominio:&nbsp; <input type="text" name="dominio" value="">
  46.     <input type="submit" name="btn" value="Login">
  47. </form>
  48. </body>
  49. </html>
  #5 (permalink)  
Antiguo 06/05/2010, 12:41
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Generar Public Function con un trozo de código

Ok, gracias!!

mi manera de ejecutar la función no debe de ser correcta... pero ya veo que no es problema de la función en si misma

probaré a cambiar mi página llamando a la función de otra forma

reitero gracias!


sl2


Cita:
Iniciado por Myakire Ver Mensaje
Cómo que no funciona?

Claro que lo hace

Código ASP:
Ver original
  1. <%
  2. FUNCTION ValidaLdap(strUsername,strpassword,domainname)
  3.  
  4. Set objDomain = GetObject ("GC://rootDSE")
  5. objADsPath = objDomain.Get("defaultNamingContext")
  6. Set objDomain = Nothing
  7. Set objConnection = Server.CreateObject("ADODB.Connection")
  8. objConnection.provider ="ADsDSOObject"
  9. objConnection.Properties("User ID") = domainname+"\" + strUsername
  10. objConnection.Properties("Password") = strpassword
  11. objConnection.open "Active Directory Provider"
  12. Set objCommand = CreateObject("ADODB.Command")
  13. Set objCommand.ActiveConnection = objConnection
  14. objCommand.CommandText ="select cn FROM 'GC://"+objADsPath+"' where sAMAccountname='"+strUsername+"'"
  15.  
  16. on error resume next
  17.  
  18. Set objRS = objCommand.Execute
  19.  
  20. If Err.Number <> 0 Then
  21. ldap = 0
  22. Else
  23. ldap = 1
  24. End If
  25. ValidaLdap = ldap
  26.  
  27. End Function
  28.  
  29. if Request("login") <> "" Then
  30.    if ValidaLdap(Request("login"), Request("password"), Request("dominio")) Then
  31.         response.write "Correcto"
  32.      else
  33.         response.write "Incorrecto"
  34.    end if
  35. End if
  36.  
  37. %>
  38.  
  39.  
  40. <html>
  41. <body>
  42. <form method=post>
  43.   Login:&nbsp; <input type="text" name="login"    value=""><br>
  44.     Password:&nbsp; <input type="password" name="password" value=""><br>
  45.     Dominio:&nbsp; <input type="text" name="dominio" value="">
  46.     <input type="submit" name="btn" value="Login">
  47. </form>
  48. </body>
  49. </html>

Etiquetas: function, public
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:16.