0

カスタム ユーザー プロバイダーとデフォルトのログイン フォームで認証しようとしています。

間違ったパスワードを入力すると、「資格情報が正しくありません」と表示されるため、ログイン部分は機能しているようです。正しいパスワードを入力してリダイレクトをキャッチすると、ツールバーに自分のユーザー名が表示されます。

しかし、リダイレクト後、私は得る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()

4

1 に答える 1

0

私の問題を見つけました。この例外はrefreshUser()でスローされます。そこで、ドキュメントに示されているように、Userクラスのインスタンスを確認しましたが、名前空間を間違えました。存在しないクラスに対して「use」ステートメントがあり、phpエラーはスローされませんでした。

于 2012-11-05T19:30:57.663 に答える