Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony2 - Steam authentification

Mettre en place une connexion steam sur son site

    31 décembre 2015 à 3:24:05

    Salut à tous,

    :boire9: :boire9:Tout d'abord joyeuses fêtes  :boire9: :boire9: !

    SITUATION:
    Voila je suis entrain de construire un forum grâce au framework Symfony 2.
    Sur le forum, j'ai mis en place un système de connexion par la base de donnée .

    QUESTION:
    J'aimerais remplacer le "système de connexion par la base de donnée" par une connexion via steam.

    ETAT:
    Après pas mal de recherches je bloc toujours ....
    Je suis tomber sur pleins de truc comme par exemple : OpenId
    Mais je n'arrive pas à trouver quelque chose de personnalisable et de simple à mettre en place

    Je ne demande pas quelque chose de tout fais sans le comprendre,
    mais si quelqu'un a déjà mis ce genre de système en place, un petit coup de pouce ne serais pas de refus.

    Cordialement MoutMout

    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2015 à 3:59:24

      Bonsoir,

      je n'ai jamais mis un tel système en place et je n'utilise pas Symfony donc mon aide sera limitée, cependant tu pourrais regarder ce qui est proposé ici ça semble correspondre à ce que tu cherches.

      P.S. : Bonnes fêtes également. :)

      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2015 à 4:22:11

        Salut à toi !

        Alors oui j'avais oublier de préciser:

        Avec du PHP procédural j'avais déjà réussi à mettre en place une "steam auth".

        Par contre je n'y arrive pas (dutout) sur symfony....

        J'ai l'impression que "openid" est le top mais je suis perdu ....

        Merci pour ta recherche !

        • Partager sur Facebook
        • Partager sur Twitter
          31 décembre 2015 à 11:11:06

          En cherchant un peu on trouve des libs qui font le taff (pas testé) https://github.com/Ehesp/Steam-Login

          -
          Edité par Jacob Delcroix 31 décembre 2015 à 11:11:19

          • Partager sur Facebook
          • Partager sur Twitter

          Développeur Web Freelance. Spécialiste Symfony et Laravel.

            31 décembre 2015 à 22:55:10

            Merci pour ta réponse j’étais aussi tomber dessus, le seul HIC qui me dérange c'est:

            "Note: The package can also easily be used with the Laravel 4 PHP Framework."

            Mais je vais essayer de le mettre en place sur symfony.

            Bonne année 2016 :D

            • Partager sur Facebook
            • Partager sur Twitter
              1 janvier 2016 à 7:16:51

              Yeeeeeah !

              J'ai réussi à mettre l'authentification steam sur symfony 2 !! :D

              Bon déjà, j'ai essayer pas mal de trucs, principalement en rapport avec "OPENID".

              J'ai finalement utilisé la librairie citer juste au dessus [EHESP-STEAM-LOGIN] car elle est plutot simple à mettre en place.

              En cherchant un peu on peut facilement l'adapter sur son projet symfony 2 et la personnaliser à sa manière.

              Pour ceux que ça intéresse voila les manip' faîtes:

              INSTALLATION:

              Mettre le "require" dans composer:

              || "ehesp/steam-login": "~1.0.1"

              Dans le controller créer une instance de la classe STEAMLOGIN (ne pas oublier le USE !! ):

              || use Ehesp\SteamLogin\SteamLogin;

              || $login = new SteamLogin();

              (Et bien sur, envoyer "$login" à la vue (twig)...)

              Et la vous pouvez par exemple faire un lien tout simple (depuis une vue):

              || <a href="{{ login.url }}" id="">STEAM AUTH</a>

              Pour finir, choisir l'URL de redirection une fois authentifier à steam :

              -> RacineProjet/vendor/ehesp/steam-login/src/Ehesp/SteamLogin.php

              Mettre l'URL voulu à ligne :  " $return = "

              cela va changer le "openid.return_to"

              PS: J'ai l'impression que l'adaptation sur symfony 2 n'est pas encore réellement faîte pour cette lib :

              "To Do

              Add PHPUnit tests

              Integration with other frameworks: CodeIgniter, Symfony 2"

              Je vous souhaite à toutes et à tous une MAGNIFIQUE année 2016.

              OC vu que c'est mon premier post, je me permet de te féliciter pour ton site, c'est juste une "dinguerie", entre le nombre de cours que j'ai déjà parcouru et le nombre de cours qui s'impatiente de me rencontrer. Tu me fais aimer apprendre !

              -
              Edité par matthieu_17 1 janvier 2016 à 7:26:56

              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2016 à 2:38:16

                Bon du coup, je rencontre un autre problème ...

                PROBLÉMATIQUE

                Comment garder les informations de connexion steam sur toutes les pages de mon site ? (Et durant un certain temps)

                ETAT

                Actuellement, lorsque je me connecte, je suis rediriger vers une page de mon site ( en l’occurrence la page d'accueil) avec comme informations reçus par la connexion : l'id steam. Mais dès que je recharge ou change de page il ne garde pas cette information.....

                En php procédural, j'aurais crée une variable de session qui contiendrait l'id steam comme identifiant.

                j'ai vu qu'il y avait un systeme de session sur symfony mais cela ne me semble pas être la solution à mon problème.

                Je viens de passer la journée dessus sans succes, alors un petit coup de pouce m'aiderais pas mal :D

                • Partager sur Facebook
                • Partager sur Twitter
                  2 janvier 2016 à 13:08:54

                  Bah pourquoi ça ne serait pas la bonne solution ? Tu gardes les informations en session. Moi j'aurais fait :

                  1- Inscription / Connexion via Steam, Steam tu renvoies des infos alors hop je crée un compte dans ma base avec les informations de Steam (et d'autres informations)

                  2- Lors de chaque connexion via Steam je vais chercher les informations en base grâce à l'ID Steam puis je stocke tout ça en session.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Développeur Web Freelance. Spécialiste Symfony et Laravel.

                    3 janvier 2016 à 17:01:35

                    Salut !
                    Merci d'avoir pris le temps de me répondre !

                    Depuis mon dernier message, j'ai effectivement réussi à le mettre en place via les sessions.
                    Mais cela ne me semble pas être la bonne solution pour plusieurs raisons :
                    1. Je n'utilise pas le système de sécurité avec le fichier "security.yml", et du coup lorsque je suis connecté à steam via mon site, dans ma toolbar symfony il y a toujours marqué "anonymous".
                    2. Je rencontre un problème une fois connecté : si je refresh la page juste après la connexion à steam ( donc pour moi : l'accueil )
                    la valeur de ma session va ce transformer en "NULL"
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 février 2016 à 11:48:27

                      Si tu es toujours sur ton problème, je te conseillerai de faire un tour du côté de ce cookbook symfony: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

                      Je suis personnellement en train de développer un grooos site communautaire et j'ai utilisé HWIOAuthBundle (authentification oAuth utilisée pour Facebook et un forum VBulletin) avec un bridge FOSUserBundle (pour la persistance des utilisateurs dans la base de données), et je vais essayer d'intégrer Ehesp/Steam-Login avec le tout.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 février 2016 à 13:16:04

                        Okay, bon pour ceux que ça pourrait intéresser je poste ma solution, qui fonctionne à MERVEIIIIILLE.

                        Alors, en premier lieu, j'ai importé la classe SteamLogin de Ehesp/Steam-Login, ai dégagé l'implements, et ai passé toutes les fonctions en statique (histoire de pas avoir à faire d'instantiations pour si peu).

                        Ensuite, j'ai intégré la fonction url à mon Extension twig déjà faite:

                        use Site\FrontBundle\Utils\SteamLogin;
                        use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
                        ...
                            public function getFunctions()
                            {
                                return array(
                                    ...,
                                    new \Twig_SimpleFunction('steamLoginLink', array($this, 'renderSteamLoginLink')),
                                );
                            }
                        
                            public function renderSteamLoginLink()
                            {
                                return SteamLogin::url($this->router->generate('site_front_steam_login_handle', array(), UrlGeneratorInterface::ABSOLUTE_URL));
                            }

                        (pour plus d'informations voir http://symfony.com/doc/current/cookbook/templating/twig_extension.html)

                        Depuis twig je render donc le lien avec l'URL via {{ steamLoginLink() }}

                        + la route de handling

                        site_front_steam_login_handle:
                            path:     /steam-loginhandler
                            defaults: { _controller: SiteFrontBundle:Default:steamLoginHandle }

                        Edition apportée à ma class User:

                            /**
                             * @ORM\Column(name="steam_id", type="string", nullable=true)
                             */
                            public $steam_id;

                        (champs représentant un ID unique pour le système d'authentification courant, voir plus bas pour plus d'informations)

                        Et pour ce qui est du controller, rien de plus simple (Je rappelle que j'utilise FOSUserBundle, et que mes utilisateurs ne peuvent pas s'authentifier directement depuis un formulaire sur le site) :

                        use Site\FrontBundle\Utils\SteamLogin;
                        use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
                        ...
                            public function steamLoginHandleAction(Request $request)
                            {
                                $error = false;
                        
                                try {
                                    $steam = SteamLogin::validate();
                        
                                    $um = $this->get('fos_user.user_manager');
                                    if(!($user = $um->findUserBy(array('steam_id' => $steam)))) {
                                        $infos = json_decode(file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=<YOUR_STEAMAPI_KEY_HERE>&steamids=".$steam));
                                        $p = $infos->response->players{0};
                        
                                        $user = $um->createUser();
                                        $user->setUsername($p->personaname);
                                        $user->setEmail("");
                                        $user->setPlainPassword(md5("JESUISUNPUTAINDEKIWIDELESPACE".time()));
                                        $user->setEnabled(true);
                                        $user->setAvatar($p->avatarfull);
                                        $user->steam_id = $p->steamid;
                                        $um->updateUser($user);
                                    }
                        
                                    $token = new UsernamePasswordToken($user, $user->getPassword(), 'main', $user->getRoles());
                        
                                    $context = $this->get('security.context');
                                    $context->setToken($token);
                        
                                    return $this->redirect($this->generateUrl('site_front_homepage'));
                                }
                                catch(Exception $e) {
                                    $error = true;
                                    return $this->redirect($this->generateUrl('site_front_homepage'));
                                }
                        
                                return new Response();
                            }

                        (technique basée sur le système d'auth de HWIOAuthBundle, à savoir "je récupère l'user avec un id qui correspond au service d'authentification courant (ici steam donc steam_id), si l'utilisateur n'existe pas, je le créé, le sauvegarde, puis quoi qu'il en soit, l'authentifie, puis le redirige)

                        {vous noterez que ma classe User a un champs avatar:string que je récupère avec ce système au passage}

                        + petit bonus de correction: j'ai eu une erreur en retour de openid me disant que mon returnto ne correspondait pas à mon domaine, je me suis rendu compte que dans la librairie de Ehesp/Steam-Login, une ligne était à éditer dans la fonction url:

                        'openid.realm'      => (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'],

                        est à changer en 

                        'openid.realm'      => (!($_SERVER['HTTPS'] == "off") ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'],

                        Sur ceux messieurs je vous souhaite une bonne journée, et surtout bon code !

                        -
                        Edité par BlackW0lf 6 février 2016 à 13:20:22

                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 avril 2016 à 2:29:00

                          Salut à tous,

                          Très intéressé par l’installation du login by steam j'ai essayé de suivre ce que tu proposais BlackW0lf mais hélas je suis un peu perdu :(.

                          Après avoir suivi les manipulations que tu décris je me retrouve avec l'erreur : 

                          The Steam login request timed out or was invalid

                          Pourrais-tu m'éclairer d'avantage ?

                          Merci et bonne soirée

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            6 mai 2016 à 0:05:22

                             @blackwolf

                            Simpa ! Perso je n'utilise pas FOSuserBundle et pour l'instant pas de connexion a FB et autre reseau sociau.

                            @tomDurand

                             J'ai repondu a ton MP avec mon autre compte.

                            J'avais finalement reussi a utiliser l'auth steam mais la recuperation des infos etait fonctionnelle MAIS degeulassement coder je me souviens et j'avais pas trouver d'autre solution...

                            Mon systeme PARSER les infos de la page de profil steam version XML (grace a l'ID steam) en faisant un tableau de recuperation visant les balises.

                            genre : <pseudo>PSEUDO</pseudo> etc  je crois... en retirant les balise via je sais plus quel fonction php qui peux enlever des caractere d'une variable...

                            Si meilleur idée pour récupérer toutes les infos steam une fois authentifié je suis toujours preneur !

                            -
                            Edité par Anonyme 6 mai 2016 à 0:16:27

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Symfony2 - Steam authentification

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown