实际上是否有人将这两者整合?我现在正在努力做到这一点,但我不知道如何克服我遇到的问题。Symfony2:实际上将FR3DLdapBundle与FOSUserBundle集成在一起存在问题
首先,我的版本:
- Symfony的2.0.15
- FOSUserBundle 1.2.0
- FR3DLdapBundle 1.5.x的
什么不目前的一个问题是让ldap包联系我的ldap服务器并验证用户身份。这工作正常。
问题是何时需要坚持用户。这里是我的用户实体是什么样子
<?php
namespace JWT\EufonyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FR3D\LdapBundle\Model\LdapUserInterface;
use FOS\UserBundle\Entity\User as BaseUser;
/**
* JWT\EufonyBundle\Entity\User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="JWT\EufonyBundle\Entity\UserRepository")
*/
class User extends BaseUser implements LdapUserInterface
{
/**
* Ldap Object Distinguished Name
* @var string $dn
*/
protected $dn;
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* {@inheritDoc}
*/
public function setDn($dn)
{
$this->dn = $dn;
}
/**
* {@inheritDoc}
*/
public function getDn()
{
return $this->dn;
}
}
这是导致MySQL表的样子
mysql> describe user;
+-----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| username_canonical | varchar(255) | NO | UNI | NULL | |
| email | varchar(255) | NO | | NULL | |
| email_canonical | varchar(255) | NO | UNI | NULL | |
| enabled | tinyint(1) | NO | | NULL | |
| salt | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| last_login | datetime | YES | | NULL | |
| locked | tinyint(1) | NO | | NULL | |
| expired | tinyint(1) | NO | | NULL | |
| expires_at | datetime | YES | | NULL | |
| confirmation_token | varchar(255) | YES | | NULL | |
| password_requested_at | datetime | YES | | NULL | |
| roles | longtext | NO | | NULL | |
| credentials_expired | tinyint(1) | NO | | NULL | |
| credentials_expire_at | datetime | YES | | NULL | |
+-----------------------+--------------+------+-----+---------+----------------+
这个问题是从FOS\UserBundle\Entity\User
继承了所有列 - 特别是所有这些的NOT NULL列我当用户使用LDAP进行身份验证时,永远不会有值。
那么这里有什么解决方案?我不能为像user.salt
或user.password
这样的列“伪造”数值。
我检查的类层次结构从FOS\UserBundle\Entity\User
上并像password
列的要求是FOS\UserBundle\Model\UserInterface
(以下层级)
FR3D\LdapBundle\Model\LdapUserInterface <------------------------+
|
Symfony\Component\Security\Core\User\UserInterface |
^ |
+- Symfony\Component\Security\Core\User\AdvancedUserInterface |
^ |
+- FOS\UserBundle\Model\UserInterface <---+ |
| |
FOS\UserBundle\Model\UserInterface <-------------+ |
| |
implements | |
FOS\UserBundle\Model\User -----------------------+ |
^ |
+- FOS\UserBundle\Entity\User |
^ implements |
+- JWT\EufonyBundle\Entity\User --------------------------+
这告诉我,我居然无法实现对用户的通过坚持LDAP身份验证一些东西延伸到FOS\UserBundle\Entity\User
,这感觉就像是说“完全不与FOSUserBundle集成”一样,尽管这似乎是FR3DLdapBundle的整体目的。
如果我的用户类不延伸FOS\UserBundle\Entity\User
,然后我失去所有的角色/组的好东西是FOSUserBundle提供开箱即用的。
我错过了文档中的内容吗?我不知道如何完成这项工作。
我知道这是一个老的文章,但我希望得到一个更好的理解,当你说:“如果你在DB中设置一个密码,并储存它,然后验证将是对DB而不是Ldap“。是否有可能将用户存储在数据库中,但是仍然使用LDAP进行身份验证? (这就是我想要做的) – Christian
是的,只是不填充提供商阵列,并保持fr3d_ldap在您的防火墙 – Maks3w
您的信息帮助。我还必须花更多时间在config.yml中正确设置ldap设置,现在我可以登录了!任何关于为什么第二次登录来自同一用户的指针会导致系统尝试第二次保存用户并因此失败? – Christian