実際に2つを統合した人はいますか?私は今そのように取り組んでいますが、私が抱えている問題を乗り越える方法がわかりません。
まず、私のバージョン:
- シンフォニー 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
特に、ユーザーが LDAP で認証するときに値を持たないすべての NOT NULL 列に起因します。
それで、ここでの解決策は何ですか?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
。FR3DLdapBundle .
また、ユーザー クラスがextendsではない場合、 FOSUserBundleFOS\UserBundle\Entity\User
がすぐに提供するすべてのロール/グループの利点を失います。
ドキュメントの何かを見逃していませんか? これを機能させる方法がわかりません。