共通のエンティティを共有するが、異なるデータベース設定を使用する複数のsymfony2アプリケーションがあります。これらのデータベースのそれぞれは、テーブルuser
,user_role
およびrole
を有する。ここで Symfony2は複数のアプリケーション間でユーザーを共有しています
www.myproject.com/app1/login
を訪問し、既存のトークン
ONLY同じユーザーが
app2
のデータベース(同じユーザ名に存在する場合、パスワードを使用する
/app2/
にURLを変更した後
app1
にログインできるようにしたいと思いますと塩)。
現在はrefreshUser()
が呼び出されているとき、私は本当に見ることができない
...あなたは、かなり不便同意しなければならない、ある同じユーザ名のみをチェック...: -/
すべてのアプリケーションは、同じ使用しますUser
およびRole
エンティティとUserRepository
です。
ご協力いただければ幸いです。
UserRepository:
class UserRepository extends EntityRepository implements \Symfony\Component\Security\Core\User\UserProviderInterface{
/** @var User */
private $user;
public function loadUserByUsername($username) {
/** @var $Q \Doctrine\ORM\Query */
$Q = $this->getEntityManager()
->createQuery('SELECT u FROM CommonsBundle:User u WHERE u.username = :username')
->setParameters(array(
'username' => $username
));
$user = $Q->getOneOrNullResult();
if ($user == null){
throw new UsernameNotFoundException("");
}
return $this->user = $user;
}
public function refreshUser(UserInterface $user) {
return $this->loadUserByUsername($user->getUsername());
}
public function supportsClass($class) {
return $class === 'CommonsBundle\Entity\User';
}
public function findById($id){
return $this->getEntityManager()
->createQuery('SELECT u FROM CommonsBundle:User u WHERE u.id = :id')
->setParameters(array(
'id' => $id
))
->getOneOrNullResult();
}
}
ユーザ#1のequals(たUserInterface):
私は、このメソッドを書くためのきれいな方法があると知っているが、私はこの作業を見た後、それを書き換えます:)
public function equals(UserInterface $user)
{
if (!$user instanceof User) {
return false;
}
if ($this->password !== $user->getPassword()) {
return false;
}
if ($this->getSalt() !== $user->getSalt()) {
return false;
}
if ($this->username !== $user->getUsername()) {
return false;
}
return true;
}
ありがとうございました!過去数日間私はこれについていくつかの研究をしてきましたが、あなたの答えを読んだ後、想像したように私が全面的なアイデアをあきらめなければならないことに気がつきました。しかし、ファイアウォールサービスポイントの使用についての考えは、非常に興味深く、検討する価値があります。 symfonyの公式ドキュメントは、別々のアプリケーションを推奨するのではなく、代わりにバンドルした後に、おそらく後でコードリファクタリングを行う必要があります。とにかく、このような詳細な説明と非常に有益な勧告をいただき、ありがとうございます。 :) –