IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

comment logguer sans ecran de login [3.x]


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut comment logguer sans ecran de login
    Bonjour,
    J'ai une application pour laquelle l'utilisateur doit s'authentifier sur un autre site qui me renvoie un token d'authentification.
    Avec ce token je sais si la personne est authentifiée (en vérifiant par un webservice auprès de ce site que le token est ok).

    Donc ce site redirige l'utilisateur sur une page particulière de mon site ou je peux récupérer le token et de là je dois authentifier au sens symfony mon utilisateur.
    Cependant je ne vois pas comment faire. Meme à supposer que j'ai un login mot de passe à fournir... J'ai pensé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->redirectToRoute('login_check',array('username'=>'login','password'=>'mdp'));
    Mais ça ne fonctionne pas...

    Quelqu'un a une idée svp?

    Je précise que j'ai un écran de login fonctionne et un provider aussi qui fonctionne déjà, mais évidemment là on ne passe pas par l'écran de login...

    Merci par avance!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Ci dessous un exemple fonctionnel de login utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
    use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
    //....
        public function testAutoLoginAction(Request $request) {
            //exemple de récupération de l'user
            $user = $this->getDoctrine()->getManager()->getRepository(\MemberBundle\Entity\Member::class)->find(4);
            //login
            $token = new UsernamePasswordToken($user, $user->getPassword(), "main", $user->getRoles());//"main" = nom du firewall dans le fichier de configuration "security.yml"
            $this->get('security.token_storage')->setToken($token);//utilisateur connecté
            //now dispatch the login event
            $event = new InteractiveLoginEvent($request, $token);
            $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
            //...
        }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Excellent, merci pour la réponse!

    J'ai eu néanmoins un problème: j'étais renvoyé systématiquement vers la page de login...
    Voici la résolution:

    En faisant une recherche avec ce code, j'ai trouvé une note d'un dev qui disait qu'avec symfony >=3.3 ça ne fonctionnerait pas.
    Son explication:
    The accepted version will not work with symfony 3.3. User will be authenticated in the next request instead of the current one. The reason is that ContextListener checks for previous session existence and if not exists it will clear the security TokenStorage. The only way around this (hackish as hell) is to fake the existence of previous session by manually initialising the session (and cookie) on the current request.
    Il propose de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    private function logUserIn(User $user)
    {
        $token = new UsernamePasswordToken($user, null, "common", $user->getRoles());
        $request = $this->requestStack->getMasterRequest();
     
        if (!$request->hasPreviousSession()) {
            $request->setSession($this->session);
            $request->getSession()->start();
            $request->cookies->set($request->getSession()->getName(), $request->getSession()->getId());
        }
     
        $this->tokenStorage->setToken($token);
        $this->session->set('_security_common', serialize($token));
     
        $event = new InteractiveLoginEvent($this->requestStack->getMasterRequest(), $token);
        $this->eventDispatcher->dispatch("security.interactive_login", $event);
    }
    J'ai ajouté simplement $this->session->set('_security_common', serialize($token)); à mon code, pas la partie if(!$request->hasPreviousSession()) {...} et là ça a fonctionné !
    Bon par contre on me dit que je suis loggué mais pas "authenticated". C'est un autre problème j'imagine...


    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accéder à une page web sans passer par login et mdp
    Par benthebest dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 21/07/2006, 01h04
  2. [MySQL] comment faire sans les vues ?
    Par phpaide dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/04/2006, 13h32
  3. [PPC][Emulateur VS]Comment synchroniser sans Visual Studio?
    Par arnolem dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 01/03/2006, 16h55
  4. [IDE][VS2005] Comment installer sans le service pack 2 ?
    Par Abderrahman dans le forum EDI/Outils
    Réponses: 6
    Dernier message: 24/01/2006, 12h30
  5. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo