Ich habe mehrere symfony2-Anwendungen, die gemeinsame Entitäten teilen, aber unterschiedliche Datenbankeinstellungen verwenden. Jede dieser Datenbanken hat Tabellen user
, user_role
y role
.
Hier ist der Haken: Ich möchte, dass sich dieser Benutzer bei folgenden Seiten anmelden kann app1
durch einen Besuch www.myproject.com/app1/login
und nach Änderung der URL in /app2/
vorhandenes Token zu verwenden NUR wenn ein identischer Benutzer existiert in app2
Datenbank (gleicher Benutzername, Passwort und Salt). Derzeit wird nur nach demselben Benutzernamen gesucht, was, wie Sie sicher zugeben werden, ziemlich unbequem ist...
Ich kann nicht wirklich erkennen, wann refreshUser()
aufgerufen wird... :-/
Alle Anwendungen verwenden dasselbe User
y Role
Einrichtungen und UserRepository
.
Für jede Hilfe wären wir dankbar!
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();
}
}
User#equals(UserInterface):
Ich weiß, es gibt einen schöneren Weg, um diese Methode zu schreiben, aber ich werde es neu schreiben, nachdem ich sehe, dass dies funktioniert :)
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;
}