有人真的把这两者结合起来了吗?我现在正致力于这样做,但我不知道如何克服我所面临的问题。
首先,我的版本:
目前没有问题的是如何让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进行身份验证时我将永远不会有值的所有NULL列。
那么这里的解决方案是什么?我不能为user.salt或user.password这样的列“伪造”值。
我在up上检查了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 --------------------------+这告诉我,我实际上无法为扩展FR3DLdapBundle.的用户实现LDAP身份验证,尽管这似乎是FOS\UserBundle\Entity\User的全部目的,但感觉就像说“根本不与FOSUserBundle集成”一样。
如果我的用户类没有扩展FOSUserBundle,那么我就失去了FOS\UserBundle\Entity\User提供的所有角色/组功能。
我在文件里漏掉了什么吗?我不知道该怎么做。
发布于 2012-06-29 13:49:03
我不明白你有什么问题。如果您设置了密码并将其存储在DB中,那么身份验证将针对DB而不是Ldap。
您应该在“连锁提供者”键下有以下提供程序:
提供者: fos_userbundle,fr3d_ldapbundle
提供程序的顺序很重要,您可以玩忽略其中的一些,但永远不会在fr3d_ldapbundle之前使用fos_userbundle。
如果在创建用户时需要填充某些用户属性,那么您可以按照此食谱并设置自己的值。
问候
https://stackoverflow.com/questions/11195774
复制相似问题