Utilisation de la dernière Symfony and FosuserBundle, après avoir enregistré un nouvel utilisateur avec succès, l'utilisateur est automatiquement connecté. Je veux empêcher cela. Ma raison est que seul un utilisateur spécial devrait pouvoir enregistrer de nouveaux utilisateurs.
Je dois deviner que je dois remplacer la libéralisation dans le registreController du paquet, mais je ne sais pas comment. P>
i Essayé: http://symfony.com/doc/current/bundles/fosuserbundle/overriding_controls .html , mais il semble être obsolète, aucun utilisateur n'est créé avec cette méthode. p>
Toute astuce est appréciée. P>
EDIT: STRUT> P> J'ai découvert que je n'avais pas créé le paquet enfant correctement. J'ai aussi dû créer mes propres événementsListener. Cela fonctionne maintenant lorsque je écrase le Etrange chose est que lorsque j'utilise le C'est dans mon auditeur: p> i Définissez la redirection dans l'événement code> Event et le code > Enregistrement_commanded code> est vide. Avec le débogueur, je peux vérifier que mon propre événement d'auditeur est appelé, mais l'événement d'origine est également appelé. p> p> FosuseRevents :: Inscription_success Code> Événement. P>
FosuseRevents :: Enregistrement_commanded Evénement, les deux événements Sont expédiés, mes bundle et la Fosuserbundle's, de sorte que l'utilisateur soit redirigé vers le site correct, mais connecté en tant que nouvel utilisateur. p>
4 Réponses :
Vous pouvez résoudre ce problème avec un auditeur, dans FOS User Bundle, il authentifie l'utilisateur après l'enregistrement.
Fichier: Classe: Si vous cochez cette classe, vous le verriez sur les pistes dans Vous pouvez vérifier https://github.com/friendsofsymfony/fosuserbundle/blob/master/resources/doc/controller_events.rst Pour écrire votre auditeur à la déconnexion. P> Remarque: ce n'est peut-être pas un bon sens de la déconnexion de l'utilisateur de déconnexion de chaque processus d'enregistrement, mais si vous utilisez FosuserBundle la meilleure façon et une empreinte minimale serait ceci, s'il existe déjà une configuration YML n'existe pas, réellement En code, il n'y a pas de direction de YML Conf. Donc, cette approche serait min. Empreinte. P> FriendsInsymfony / User-Bundle / EventListener / AuthenticationListener.php Code> P >
FOS \ UserBundle \ EventListener \ AuthentificationListener CODE> P>
inscrivez-vous p >
authentication écouteur code> IT Dispatchets événement après le déclenchement
loginuer code> fonction. Par conséquent, vous devez vous déconnecter utilisateur dans votre auditeur qui abonna `enregistrement terminé. P>
try {
$this->loginManager->logInUser($this->firewallName, $event->getUser(), $event->getResponse());
$eventDispatcher->dispatch(FOSUserEvents::SECURITY_IMPLICIT_LOGIN, new UserEvent($event->getUser(), $event->getRequest()));
} catch (AccountStatusException $ex) {
// We simply do not authenticate users which do not pass the user
// checker (not enabled, expired, etc.).
}
Je ne veux pas que l'utilisateur soit connecté en premier lieu. C'est pourquoi j'ai écrasé l'événement code> inscrivez-vous code> lorsque le nouvel utilisateur est authentifié par défaut.
Voulez-vous dire que vous avez étendu le paquet lorsque vous dites remplacer l'événement?
Ooops Je viens de faire appris la technique pour remplacer un service / écouteur par service.yml c'est cool trucs :) Stackoverflow.com/questions/18745087/...
Vous êtes presque là, comme vous l'avez dit que vos auditeurs sont appelés, mais la commande n'est pas correcte, vous devez donc rendre votre auditeur à être exécutée avant la valeur par défaut Afin de faire ce changement
FosuseRevents :: Inscription_SUCCESS => 'Onregistrationccess' p> blockQuote>
à p>
FosuseRevents :: Inscription_SUCCESS => ['OnregistrationsCCESSE', - 10], P> blockquote>
remarque le -10 strong> là-bas, cela change la priorité de l'auditeur. p>
xxx pré> J'utilise symfony 2.8 avec le Fosbundle version p>
FriendsInsymfony / User-Bundle Dev-maître 1f97ccf Symfony FosuserBundle P> blockQuote>
en fonction de la sortie de
Info Compositeur code> p> p>
Merci pour la réponse, malheureusement, je ne peux pas le tester maintenant car le projet a déjà été fini.
La bonne façon de faire cela consiste à créer un Compiler passe . P> Vous pouvez également: remplacer le service en ajoutant un nouveau service en utilisant Le même nom: fos_user.listener.Authentication sur votre fichier app / config.yml ou sur votre fichier de configuration Bundle et en ajoutant votre nouvelle classe comme je l'ai fait ci-dessous et ajoutez ceci P> Voici comment Remplacez la journalisation automatique lors de l'enregistrement d'un nouvel utilisateur à l'aide de la technique de Pass de compilateur. P> Le compilateur passe strong> p> enregistre votre compilateur passe sur votre fichier principal strong> p> Il existe d'autres moyens, tels que le remplacement du service d'authentification sur votre config.yml, mais la solution ci-dessus est la solution la plus propre et la plus maintenue. sur j'ai trouvé. p> p>
En fait, il n'est pas nécessaire de faire d'entre eux. Le service voir Ligne 74-76 dans < Code> FOS \ UserBundle \ dépendencynjection \ FosuseRextension Code>. P>
Cette information est également incluse dans le document FOS UserBundle Configuration . p> fos_user.listener.Authentication code> est supprimé du conteneur si
use_authentication_listener code> est défini sur false. P>
Les docs se ressemblent bien. Il existe un certain nombre de moyens de remplacer un fichier de paquets. Faites-vous un «enfant» de la UserBundle comme dans les docs? ou quelque chose de différent? De plus, si vous êtes après qu'un administrateur ne soit capable de créer uniquement des utilisateurs, peut-être que le côté de l'inscription de FosuserBundle est le mauvais bit? Créer sûrement un crud pour gérer les utilisateurs derrière un pare-feu administrateur serait meilleur?
@DevDonkey: Vous avez eu raison, j'ai échoué à créer correctement le paquet. Semble fonctionner maintenant. Peut-être que créer un crud aurait été plus facile.
Cool, content que tu as eu le tri.