實際上是否有人將這兩者整合?我現在正在努力做到這一點,但我不知道如何克服我遇到的問題。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