User
エンティティ用のカスタムエンティティプロバイダを作成しています。Symfony2セキュリティ - ユーザ "Ibw UserBundle Entity User"のユーザプロバイダがありません
There is no user provider for user "Ibw\UserBundle\Entity\User".
私は戻って、デフォルトのDoctrineのエンティティプロバイダへの切り替え、すべてがうまくいけ:私はログインフォームでユーザー名とパスワードを入力したときにしかし、私はこの例外を取得します。ここ
まず私のsecurity.yml
です:
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
default_target_path: ibw_job_index
logout:
path: /logout
target:/
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
providers:
default_provider:
entity: { class: Ibw\UserBundle\Entity\User }
encoders:
Ibw\UserBundle\Entity\User: sha512
ここIbw\UserBundle\Entity\User
クラスがあります:
<?php
namespace Ibw\UserBundle\Entity;
use Doctrine\Bundle\DoctrineBundle\Registry;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* Class User
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="Ibw\UserBundle\Repository\UserRepository")
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=25, unique=true)
*/
protected $username;
/**
* @ORM\Column(type="string", length=40)
*/
protected $salt;
/**
* @ORM\Column(type="string", length=128)
*/
protected $password;
public function __construct(ContainerInterface $container)
{
$this->isActive = true;
$this->salt = md5(uniqid(null, true));
$this->container = $container;
}
public function setUsername($username)
{
$this->username = $username;
return $this;
}
public function setPassword($password)
{
$encoder = $this->container->get('security.encoder_factory')->getEncoder($this);
$this->password = $encoder->encodePassword($password, $this->getSalt());
return $this;
}
/**
* @return Role[] The user roles
*/
public function getRoles()
{
return array('ROLE_ADMIN');
}
public function getPassword()
{
return $this->password;
}
public function getSalt()
{
return $this->salt;
}
public function getUsername()
{
return $this->username;
}
public function eraseCredentials()
{
// TODO: Implement eraseCredentials() method.
}
public function serialize()
{
return serialize(array($this->id));
}
public function unserialize($serialized)
{
list($this->id) = unserialize($serialized);
}
public function getId()
{
return $this->id;
}
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
}
そして最後に、ここに私のIbw\UserBundle\Repository\UserRepository
クラスがあります:
<?php
namespace Ibw\UserBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class UserRepository extends EntityRepository implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$q = $this->createQueryBuilder('u')
->select('u')
->where('u.username = :username')
->setParameter('username', $username)
->getQuery();
try
{
$user = $q->getSingleResult();
}
catch (NoResultException $e)
{
$message = sprintf('Unable to find active admin identified by %s', $username);
throw new UsernameNotFoundException($message, 0, $e);
}
return $user;
}
public function refreshUser(UserInterface $user)
{
$class = get_class($user);
if(!$this->supportsClass($user))
{
$message = sprintf('Unsupported class type : %s', $class);
throw new UnsupportedUserException($message);
}
return $this->find($user->getId());
}
public function supportsClass($class)
{
return $this->getEntityName() === $class || is_subclass_of($class, $this->getEntityName());
}
}
EDIT:
私はJobeetBundle/Resources/config/services.yml
に、またサービスとしてそれを定義しようとしました:
providers:
default_provider:
id: ibw.user.provider
encoders:
Ibw\UserBundle\Entity\User: sha512
しかし残念ながら、それは私の後に正確に同じエラーを与える:
parameters:
ibw.user.provider.class: Ibw\UserBundle\Repository\UserRepository
ibw.user.provider.entity.class: Ibw\UserBundle\Entity\User
services:
ibw.user.provider:
class: %ibw.user.provider.class%
factory_service: doctrine
factory_method: getRepository
arguments:
- %ibw.user.provider.entity.class%
とjobeet/app/config/security.yml
に私はログインフォームを投稿します。
うーん、しかし何あなたのリンクと、この 'HTTPの違い:// goo.gl/DPHcJ4'を、ので、ここで
私はサービスとしてそれを追加しませんし、リポジトリとしても使用されています。 –
私の不注意に申し訳ありません。私はあなたのコードを調べた後、私の答えを修正しました。 –
私はサービスとして定義したり、サービスなしでそれを使ったりしてみましたが、それでも同じエラーがありました。 私のサービスで質問を編集します。 –