Symfony - Ldap 创建不连接到服务器
Symfony - Ldap create don't connect to serveur
使用 PHP 函数 ldap_connect
可以正常工作:
我的控制器:
/**
* @Route("/ldap", name="ldap")
*/
public function ldap(Request $request) {
$ldaprdn = 'cn=read-only-admin,dc=example,dc=com';
$ldappass = 'password';
$ldapconn = ldap_connect("ldap://ldap.forumsys.com")
or die("Impossible de se connecter au serveur LDAP.");
if ($ldapconn) {
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
// Connexion au serveur LDAP
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
var_dump($ldapbind);
// Vérification de l'authentification
if ($ldapbind) {
echo "Connexion LDAP OK ...";
} else {
echo "Connexion LDAP KO ...";
}
}
}
结果:bool(true)
但是如果我使用 Symfony Ldap,它就不起作用,你知道为什么吗?
我的控制器:
use Symfony\Component\Ldap\Ldap;
[...]
/**
* @Route("/ldap", name="ldap")
*/
public function ldap(Request $request) {
$host = 'ldap.forumsys.com';
$port = 389;
$version = 3;
$dn = 'cn=read-only-admin,dc=example,dc=com';
$pwd = 'password';
$ldap = Ldap::create('ext_ldap', [
'host' => $host,
'port' => $port,
'version' => $version,
]);
$ldap->bind($dn, $pwd);
var_dump($ldap);
}
结果:
["connection":"Symfony\Component\Ldap\Adapter\ExtLdap\Connection":private]=> resource(31) of type (ldap link) ["config":protected]=> array(8) { ["host"]=> string(17) "ldap.forumsys.com" ["version"]=> int(3) ["encryption"]=> string(4) "none" ["port"]=> int(389) ["connection_string"]=> string(28) "ldap://ldap.forumsys.com:389" ["debug"]=> bool(false) ["referrals"]=> bool(false) ["options"]=> array(3) { ["network_timeout"]=> string(2) "60" ["protocol_version"]=> int(3) ["referrals"]=> bool(false) } } } ["entryManager":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL } }
我使用 online Ldap 测试服务器
居然有用,看来你还不知道怎么用
虽然 ldap_bind
returns false 当身份验证不成功时,Symfony Ldap 组件的 bind
方法 returns 成功时什么都没有,并在错误时抛出异常(你可以看到来自 source code)。在您的情况下,您必须使用 try/catch 块检查 connection/authentication 是否成功:
<?php
use Symfony\Component\Ldap\Exception\ConnectionException;
try {
$ldap->bind($dn, $pwd);
} catch (ConnectionException $exception) {
// Error message based on your original code
echo 'Connexion LDAP KO:' . $exception->getMessage();
}
使用 PHP 函数 ldap_connect
可以正常工作:
我的控制器:
/**
* @Route("/ldap", name="ldap")
*/
public function ldap(Request $request) {
$ldaprdn = 'cn=read-only-admin,dc=example,dc=com';
$ldappass = 'password';
$ldapconn = ldap_connect("ldap://ldap.forumsys.com")
or die("Impossible de se connecter au serveur LDAP.");
if ($ldapconn) {
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
// Connexion au serveur LDAP
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
var_dump($ldapbind);
// Vérification de l'authentification
if ($ldapbind) {
echo "Connexion LDAP OK ...";
} else {
echo "Connexion LDAP KO ...";
}
}
}
结果:bool(true)
但是如果我使用 Symfony Ldap,它就不起作用,你知道为什么吗?
我的控制器:
use Symfony\Component\Ldap\Ldap;
[...]
/**
* @Route("/ldap", name="ldap")
*/
public function ldap(Request $request) {
$host = 'ldap.forumsys.com';
$port = 389;
$version = 3;
$dn = 'cn=read-only-admin,dc=example,dc=com';
$pwd = 'password';
$ldap = Ldap::create('ext_ldap', [
'host' => $host,
'port' => $port,
'version' => $version,
]);
$ldap->bind($dn, $pwd);
var_dump($ldap);
}
结果:
["connection":"Symfony\Component\Ldap\Adapter\ExtLdap\Connection":private]=> resource(31) of type (ldap link) ["config":protected]=> array(8) { ["host"]=> string(17) "ldap.forumsys.com" ["version"]=> int(3) ["encryption"]=> string(4) "none" ["port"]=> int(389) ["connection_string"]=> string(28) "ldap://ldap.forumsys.com:389" ["debug"]=> bool(false) ["referrals"]=> bool(false) ["options"]=> array(3) { ["network_timeout"]=> string(2) "60" ["protocol_version"]=> int(3) ["referrals"]=> bool(false) } } } ["entryManager":"Symfony\Component\Ldap\Adapter\ExtLdap\Adapter":private]=> NULL } }
我使用 online Ldap 测试服务器
居然有用,看来你还不知道怎么用
虽然 ldap_bind
returns false 当身份验证不成功时,Symfony Ldap 组件的 bind
方法 returns 成功时什么都没有,并在错误时抛出异常(你可以看到来自 source code)。在您的情况下,您必须使用 try/catch 块检查 connection/authentication 是否成功:
<?php
use Symfony\Component\Ldap\Exception\ConnectionException;
try {
$ldap->bind($dn, $pwd);
} catch (ConnectionException $exception) {
// Error message based on your original code
echo 'Connexion LDAP KO:' . $exception->getMessage();
}