カスタム ユーザー プロバイダーとデフォルトのログイン フォームで認証しようとしています。
間違ったパスワードを入力すると、「資格情報が正しくありません」と表示されるため、ログイン部分は機能しているようです。正しいパスワードを入力してリダイレクトをキャッチすると、ツールバーに自分のユーザー名が表示されます。
しかし、リダイレクト後、私は得るThere is no user provider for user "Myapp\MainBundle\Document\User\User"
私のユーザー プロバイダーは次のように構成されています。
# security.yml
providers:
database:
id: user_manager
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
login_path: /login
check_path: /login_check
logout:
path: /logout
target: /
anonymous: true
# config.yml
services:
user_manager:
class: Myapp\MainBundle\Service\User\UserManager
factory_service: doctrine_mongodb
factory_method: getRepository
arguments: [ 'MyappMainBundle:User\User' ]
calls:
- [ setEncoder, [ @security.encoder_factory ] ]
これはユーザー プロバイダーです (抽象クラスは DocumentRepository から拡張され、UserProviderInterface を実装します)。
namespace Myapp\MainBundle\Service\User;
use Myvendor\UserBundle\Service\User\AbstractUserManager;
use Myapp\MainBundle\Document\User\User;
class UserManager extends AbstractUserManager {
public function createUser() {
return new User;
}
public function supportsClass($class) {
return $class === 'Myapp\MainBundle\Document\User\User';
}
}
これはどのように起こりますか?ログイン用のプロバイダーを見つけたのに、次のリクエストで失敗するのはなぜですか?
シンフォニーのバージョン: 2.1.3
アップデート
その例外の直前にあるコードをデバッグしたところ、これがキャッチされていることがわかりました (私が持っている唯一のプロバイダーに対して): "Symfony\Component\Security\Core\Exception\UnsupportedUserException" "Instances of "Myapp\MainBundle\Document\User\User" are not supported.
. これはどのように可能ですか?私も戻ってみtrue
ましたsupportsClass()