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 :

Utiliser FOSUser sans BDD


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Utiliser FOSUser sans BDD
    Bonjour à tous,

    Voilà, je suis en train de créer un site avec une gestion des utilisateurs et je souhaitais utiliser FOSUser que je trouve bien pratique.

    Néanmoins, je ne souhaite pas récupérer mes infos membres via une base de données mais via un web-service (je lui envoie un username et il me renvoie un array avec toutes les infos qui correspondent à ce dernier). J'imagine qu'il doit y avoir un moyen de faire ça mais je suis assez novice sur symfony et j'avoue que je ne sais pas forcément par où attaquer la chose. Du coup, si vous avez des idées ou des conseils pour m'orienter..

    Je vous remercie par avance !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    As tu regardé un peu le code ? un simple user_provider maison devrait faire l'affaire non ?

  3. #3
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    goabonga pas un OATH ? tu as changé d'avis

    c'est exactement ce que je voulais faire.

    regarde ça noname2:
    http://symfony.com/fr/doc/current/co..._provider.html

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos réponses

    En fait j'avais déjà réussi à construire un provider perso qui fonctionnait bien de la manière dont je souhaitais (en suivant justement le tuto vers lequel vous m'avez dirigé). Mais c'est quand j'essaie d'associer ce provider à FOSUser que ça ne marche plus. Lorsque j'essaie de me connecter, pas d'erreur mais le formulaire me renvoie invariablement "User account is disabled" (que les identifiants soient bons ou non).

    Normalement ma classe User hérite de la classe de FosUser avec quelque chose comme ç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
    namespace Test\UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use FOS\UserBundle\Model\User as BaseUser;
     
    /**
     * @ORM\Entity
     */
    class User extends BaseUser
    {
      /**
       * @ORM\Column(name="id", type="integer")
       * @ORM\Id
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      protected $id;
    }
    Evidemment le conflit vient de là mais je ne sais pas comment m'y prendre pour donner à FosUser ce qu'il veut.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Dukoid si tu veux on peut en parler.

    Aussi non pour le problème du jour, postes ton code

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Alors voici le code du provider appelé (c'est vraiment comme dans le tuto pour l'instant) :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    namespace Test\UserBundle\ClassesUser;
     
    use Symfony\Component\Security\Core\User\UserProviderInterface;
    use Symfony\Component\Security\Core\User\UserInterface;
    use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
    use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
    use Test\UserBundle\Entity\User;
     
    class WebserviceUserProvider implements UserProviderInterface
    {
        public function loadUserByUsername($username)
        {
            // effectuez un appel à votre service web ici
            $userData = array('username'=>'monnom', 'password'=>'monpass', 'salt'=>'', 'roles' => array('ROLE_USER'));
            // supposons qu'il retourne un tableau en cas de succès, ou bien
            // « false » s'il n'y a pas d'utilisateur
     
            if ($userData != false) {
     
    					$password = $userData['password'];
    					$salt = $userData['salt'];
    					$roles = $userData['roles'];
     
                // ...
     
              return new User($username, $password, $salt, $roles);
            }
     
            throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
        }
     
        public function refreshUser(UserInterface $user)
        {
            if (!$user instanceof User) {
                throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
            }
     
            return $this->loadUserByUsername($user->getUsername());
        }
     
        public function supportsClass($class)
        {
            return $class === 'Test\UserBundle\Entity\User';
        }
    }
    À priori de ce côté là ça fonctionne. C'est le comportement en retour de la class User qui fait défaut. Veux-tu que je poste le code de la class user de FOSUser ?

    Merci

  7. #7
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    dans le config.yml il faut dire à fos_user qu'il ne doit pas utiliser la base de donnée, ni meme un fichier de config (in_memory) mais qu'il doit se connecter au webservice ou userProvider (je ne sais plus)


    je n'arrive plus à mettre la main dessus

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Ce que tu dis me parle dukoid car j'avais essayé de retirer la mention db_driver de fos_user qui me paraissait inadéquate dans mon cas. Mais j'avais vu que la mention était obligatoire et cru comprendre que les seules valeurs valides était orm, mongodb ou couchdb.
    C'est ce qui m'avait mis dans le doute quant à la possibilité de faire tourner fosUser sans bdd derrière.

    Je vais refaire des recherches dans ce sens !

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    A tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    security:
    	    providers:
    	        fos_userbundle:
    	            id: ton.user_provider
    Qui est normalement l'un de ces deux :
    https://github.com/FriendsOfSymfony/...curity.xml#L25

    Je vous conseil de ne pas travailler sur le provider mais un fos_user.user_manager ... le provider ne fait rien de plus qu'un find sur ce dernier .... n'oubliez pas non plus que ce dernier est utilisé pour toute les fonctionnalités offerte par le bundle ....

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/10/2014, 20h06
  2. [SWT] utiliser SWT sans eclipse
    Par miel_pops dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 24/01/2009, 20h48
  3. Utilisation d'une BDD pour (gros) logs
    Par Dinaïz dans le forum Décisions SGBD
    Réponses: 14
    Dernier message: 04/04/2005, 11h50
  4. utiliser query sans composant builder 5
    Par hook85 dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/01/2005, 21h09
  5. [VB-CR] Utilisation sans BDD ?
    Par myriam007 dans le forum SDK
    Réponses: 3
    Dernier message: 11/02/2004, 10h07

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