>有人真正整合了两者吗? 我现在正在努力这样做,我不知道如何克服我遇到的问题。
首先,我的版本:
- 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 --------------------------+
这告诉我,我实际上无法通过扩展FOS'UserBundle'Entity'User
的东西为用户实现LDAP身份验证,这感觉就像说"根本不与FOSUserBundle集成"一样,尽管这似乎是FR3DLdapBundle的全部目的。
如果我的用户类没有扩展FOS'UserBundle'Entity'User
,那么我将失去 FOSUserBundle 开箱即用提供的所有角色/组好东西。
我是否遗漏了文档中的某些内容?我不知道如何做到这一点。
我不明白你的问题是什么。如果您设置密码并将其存储在数据库中,则身份验证将针对数据库而不是 Ldap。
您应该在"链提供程序"键下具有以下提供程序:
提供商: [fos_userbundle, fr3d_ldapbundle]
提供商的顺序很重要,您可以省略他们的一些,但永远不要fr3d_ldapbundle可以在fos_userbundle之前进行
(https://github.com/Maks3w/FR3DLdapBundle/blob/master/Resources/doc/index.md#6-enable-fosuserbundle-as-user-provider)
如果您在创建用户时需要填写某些用户属性,则可以按照此说明书并设置自己的值。
https://github.com/Maks3w/FR3DLdapBundle/blob/master/Resources/doc/cookbook/override_ldap-manager.md
问候