6
votes

Désactiver la connexion automatique après inscription à Symfony's FosuserBundle

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.

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.

Toute astuce est appréciée.

EDIT:

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 FosuseRevents :: Inscription_success Événement.

Etrange chose est que lorsque j'utilise le 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.

edit 2:

C'est dans mon auditeur: xxx

i Définissez la redirection dans l'événement Event et le code > Enregistrement_commanded 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é.


3 commentaires

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.


4 Réponses :


1
votes

Vous pouvez résoudre ce problème avec un auditeur, dans FOS User Bundle, il authentifie l'utilisateur après l'enregistrement.

Fichier: FriendsInsymfony / User-Bundle / EventListener / AuthenticationListener.php Code> P >

Classe: FOS \ UserBundle \ EventListener \ AuthentificationListener CODE> P>

Si vous cochez cette classe, vous le verriez sur les pistes inscrivez-vous p >

dans 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>

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>

    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.).
    }


3 commentaires

Je ne veux pas que l'utilisateur soit connecté en premier lieu. C'est pourquoi j'ai écrasé l'événement inscrivez-vous 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/...



0
votes

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'

à

FosuseRevents :: Inscription_SUCCESS => ['OnregistrationsCCESSE', - 10],

remarque le -10 là-bas, cela change la priorité de l'auditeur. xxx

J'utilise symfony 2.8 avec le Fosbundle version

FriendsInsymfony / User-Bundle Dev-maître 1f97ccf Symfony FosuserBundle

en fonction de la sortie de Info Compositeur


1 commentaires

Merci pour la réponse, malheureusement, je ne peux pas le tester maintenant car le projet a déjà été fini.



1
votes

EDIT: Cette technique fonctionne sur Symfony 3.3, je ne suis pas au courant si cela fonctionne si cela fonctionne sur des versions inférieures.

La bonne façon de faire cela consiste à créer un Compiler passe .

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

Voici comment Remplacez la journalisation automatique lors de l'enregistrement d'un nouvel utilisateur à l'aide de la technique de Pass de compilateur.

Le compilateur passe xxx Le service de service xxx

enregistre votre compilateur passe sur votre fichier principal xxx

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é.


0 commentaires

2
votes

En fait, il n'est pas nécessaire de faire d'entre eux. Le service fos_user.listener.Authentication est supprimé du conteneur si use_authentication_listener est défini sur false.

voir Ligne 74-76 dans < Code> FOS \ UserBundle \ dépendencynjection \ FosuseRextension .

Cette information est également incluse dans le document FOS UserBundle Configuration .


0 commentaires