fosUserBundle を使ってサイトを立ち上げる作業をしています。いくつかの単体テストを作成する必要がありますが、それらで使用するために認証を正しく機能させることができないようです。私はいくつかの方法を試しましたが、うまくいきませんでした。
アプローチ 1 - セキュリティ設定でプロバイダーをチェーンして、信頼できる標準ログインを作成します。これを行うと、機能する唯一の認証は in_memory プロバイダーです。つまり、管理者ユーザーでログインできますが、fosUserBundle によって作成されたユーザーはログインできません。
security.yml
安全:
エンコーダ:
"FOS\UserBundle\Model\UserInterface": 平文
"Symfony\Component\Security\Core\User\User": 平文
プロバイダー:
chain_provider:
プロバイダー: [メモリ内、fos_userbundle]
インメモリ:
ユーザー:
管理者: { パスワード: 管理者、役割: ['ROLE_ADMIN'] }
fos_userbundle:
id: fos_user.user_manager
ファイアウォール:
主要:
パターン: ^/
フォームログイン:
プロバイダー: fos_userbundle
ログインパス: /
csrf_provider: form.csrf_provider
default_target_path: /メディア
ログアウト:真
匿名:本当
http_basic:
プロバイダー: in_memory
方法 2 - 単体テストのセットアップでユーザーを作成しました。しかし、この方法では、作成したばかりのユーザーでログインすることはできません。ユーザーの確認は必要ありません。
パブリック関数setUp() {
$kernel = static::createKernel();
$this->repo = $kernel->boot();
$this->repo = $kernel->getContainer();
$userManager = $this->repo->get('fos_user.user_manager');
$email = "testing".(string) self::newRandomNumber()."@test.com";
$un = "test".(文字列) self::newRandomNumber();
$fn = "テスト";
$ln = "ラスター";
$pwd = "passwordD1";
$user = $userManager->createUser();
$user->setEmail($email);
$user->setUsername($un);
$user->setFirstName($fn);
$user->setLastName($ln);
$user->setPlainPassword($pwd);
$user->setBimStaff(True);
// ユーザーをデータベースに永続化します
$userManager->updateUser($user);
$this->user = $user;
$this->client = static::createClient();
$crawler = $this->client->request('GET', '/');
$form = $crawler->selectButton('Login')->form();
// いくつかの値を設定
$un = 'ルーカス'.self::newRandomNumber();
$form['_username'] = $un;
$form['_password'] = $pwd;
// フォームを送信
$crawler = $this->client->submit($form);
print_r($this->client->getResponse());
$this->client->followRedirects();
}
フォームでのログインと http 基本認証の両方を試しましたが、どちらも機能していないようです。
誰にでもアドバイスはありますか?
ありがとう、コーリー