私は最近、私のSymfony2プロジェクトのセキュリティの設定を開始しました。私は塩を使ってsha256でエンコードすることを決めました。データベースのサンプルアカウント(自己計算sha256 salt/hashを使用)でログインしようとすると、エラーメッセージが表示されずに失敗してしまい、その理由がわかりませんでした。 私はコントローラのloginAction()メソッドに簡単なコードを記述することに決めました。これは、ユーザーが指定されたフォームを使用してログインに失敗したときにSymfony2が呼び出すメソッドです。私は、次のコードを入力:Symfony2セキュリティエンコーダがUserInterfaceインスタンスを認識しない
Catchable Fatal Error: Argument 1 passed to Symfony\Component\Security\Core\Encoder\EncoderFactory::getEncoder() must be an instance of Symfony\Component\Security\Core\User\UserInterface, instance of MyProject\MyBundle\Entity\Users given, called in /var/www/Symfony/src/MyProject/MyBundle/Controller/MainController.php on line 35 and defined in /var/www/Symfony/vendor/symfony/src/Symfony/Component/Security/Core/Encoder/EncoderFactory.php line 33
だから基本的に、getEncoder()
の引数はのインスタンスでなければならないと言っている:私は、ログインしようとしたとき
$factory = $this->get('security.encoder_factory');
$em = $this->container->get('doctrine')->getEntityManager();
$userRep = $em->getRepository('MyProjectMyBundle:Users');
$user = $userRep->find(2);
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword('cookie', 'thisisasalt');
$user->setPassword($password);
print($password);
はしかし、Symfony2のは私に次のエラーが発生しましたSymfony\Component\Security\Core\User\UserInterface
。だから、ユーザークラスは、実際のUserInterfaceクラスを実装
<?php
namespace MyProject\MyBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
...
:私はMyProjectと\ MyBundle \エンティティ\ Users.phpを検査する場合しかし、それは次の行で始まります。 UserInterfaceクラスのすべての関数が含まれています。私はSymfony2のチュートリアルで述べた方法でこれらのファイルをすべて作成しました。 Symfony2がUsersインスタンスをUserInterfaceインスタンスとして認識しない理由は何ですか?
P .:データベースは他の誰かによって作成されたので、私はそれを使用しなければなりません。 Usersテーブルには、UserInterfaceに必要な情報以外の多くの情報が含まれています。
私はあなたがばかだと言う事実を+1していません。私は+1ボタンをクリックすると失礼を感じたくありませんでした:) - このメッセージは 'UserInterface'を実装していないばかから来たものですか? –