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 :

Système d'authentification user


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut Système d'authentification user
    Bonjour,

    étant donné que j'ai toujours un peu de mal avec les différentes composantes du fos_user bundle, je me suis dis que dans mon cas ce serait bien plus pratique de construire mon propre système d'authentification. Pratique dans le sens où ça m'aiderait à comprendre comment le fos_user_bundle fonctionne.



    DU coup, plutôt que d'étendre ce bundle comme le montre tous les tutos, j'essaie de construire directement mon propre UserBundle qui me correspondrait directement.


    A ce titre, j'ai donc fait un

    UserBundle avec deux entités: User et Role. Un user étant lié à Role avec une relation Many To Many de sorte que j'ai une troisième tabme user_role en base.


    On va donc dire qu'il s'agit là du point de départ pour ce problème.


    Le soucis, c'est que si je construits un formulaire de type login: Comment je peux signaler à Symfony qu'un User s'est connecté ? De sorte à ce que je ne vois plus "Logged in as anon"

    J'ai cru comprendre qu'il y avait une histoire de token, mais je ne sais pas trop comment ça marche et je ne trouve pas la doc sur la question puisque la plupart des tutos existant proposent de reprendre le fos_user.

    Merci pour votre aide !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Salut Amnael.
    Je suis sur le même projet que toi. Pour ton information je tenais à te dire que j'ai lu que le FOSUserBundle était déprécier avec symfony 3.
    Sinon pour les tokens, comme pour le reste, tu a différente fonctionnalité dans la partie Security de symfony que tu peux quand même utiliser. UserInterface est implémenté par ton entity, ton repository lui implémente userLoaderInterface. De la symfony 3 fait le café apparemment très bien... Il te faut ensuite jouer entre ce que tu veut et les how to, car ces dernier utilise trop souvent le doc comme exemple avec un laborieux formulaire en dur dans ta vue. Perso je travail avec le builder depuis mes contrôleurs. Les gout et les couleurs quoi...

    Pour en revenir au token. Tu a une entité maintenant capable de retourner ce dernier et un return $tokenByPost == $this->generateToken(); pour la validation. En faite c'est un signature unique. Tu doit pouvoir mettre en place un synchronisme de ce système pour un changement toute les n minutes par exemple... Enfin je n'est pas encore tout saisi non plus mais j'ai cru comprendre que cela n'étais pas plus compliqué.

    Voici ma configuration du security.yml:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    # To get started with security, check out the documentation:
    # http://symfony.com/doc/current/security.html
    security:
        encoders:
            AppBundle\Entity\User:
                algorithm: sha512
                encode_as_base64: true
                iterations: 5000
     
        # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
        providers:
            # in_memory:
            #    memory: ~
            db_providers:
                entity:
                    class: AppBundle:User
                    property: username #devrai être enlevé si tu permet le log via username ou email dans ta requete comme le montre la requete du repository ci-après
     
        firewalls:
            # disables authentication for assets and the profiler, adapt it according to your needs
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
     
            main:
                anonymous: ~
                # activate different ways to authenticate
     
                # http_basic: ~
                # http://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
     
                # form_login: ~
                # http://symfony.com/doc/current/cookbook/security/form_login_setup.html
                form_login:
                    login_path: login
                    check_path: login
                    username_parameter: form[username] # ou username si tu n'utilise pas le builder
                    password_parameter: form[password]
                    default_target_path: homepage #redirection on success
                    use_referer: true #identification du referant (verifie que celui qui arrive sur ta page vient d'une requete légal et nom pas hacked.biz)
                    csrf_token_generator: security.csrf.token_manager
                    csrf_parameter: form[_token]
                logout:
                    path: /logout
                    target: logout
                    invalidate_session: false
                    delete_cookies:
                        a: { path: /, domain: test.loc }
                    #    b: { path: null, domain: null }
                    # handlers: [some.service.id, another.service.id]
                    # success_handler: some.service.id
                remember_me:
                    # token_provider: name
                    secret: "%secret%"
                    name: _ds_l
                    lifetime: 3600
                    path: /
                    domain: test.loc
                    secure: false
                    httponly: true
                    always_remember_me: false
                    remember_me_parameter: form[keep_login]
        access_control:
                - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/home, roles: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/about, roles: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/cv, roles: IS_AUTHENTICATED_FULLY }
                - { path: ^/admin, roles: ROLE_ADMIN }
    la partie remember_me n'est que ce que j'ai pu récuperer mais je n'est pas encore utilisé. Il faudra verifier donc. mais sinon le reste est au plus complet et devrai t'ouvrir de belle recherches...
    Voici le repository pour faire suivant email et username lors d'un login :
    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
    <?php
     
    namespace AppBundle\Repository;
     
    use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
    use Symfony\Component\Security\Core\User\UserInterface;
     
    /**
     * UserRepository
     *
     * This class was generated by the Doctrine ORM. Add your own custom
     * repository methods below.
     */
    class UserRepository extends \Doctrine\ORM\EntityRepository implements UserLoaderInterface
    {
        /**
         * Loads the user for the given username.
         *
         * This method must return null if the user is not found.
         *
         * @param string $username The username
         *
         * @return UserInterface|null
         */
        public function loadUserByUsername($username)
    	{
    		return $this->createQueryBuilder("u")
    			 ->where('username = :username OR email = :username')
    			 ->setParameter('username', $username)
    			 ->setParameter('email', $username)
    			 ->getQuery()
    			 ->getOneOrNullresult();
    	}
    }
    Tout le reste est dans l'entité et l'action /login et /logout de ton controller. Je t'aiderai bien d'avantage mais je suis bloqué par mon entité ou je ne sais quoi pour le moment. J'ai posté ici si celà t'interesse: https://www.developpez.net/forums/d1...lors-d-update/

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    A titre complémentaire, j'utilisais ce tutorial: https://knpuniversity.com/screencast...ep2/login-form

    Le problème c'est qu'il était pour symfony 2 et que SecurityContextInterface n'existe plus en symfony 3. Du coup, tout tombe à l'eau


    Merci pour ta réponse, je vais aussi jeter un coup d'oeil à ton post.

  4. #4
    Membre éprouvé Avatar de codefingers
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 77
    Par défaut
    Citation Envoyé par BeRoots Voir le message
    Salut Amnael.
    Je suis sur le même projet que toi. Pour ton information je tenais à te dire que j'ai lu que le FOSUserBundle était déprécier avec symfony 3.
    Salut,

    Où as tu lu cette information ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Citation Envoyé par codefingers Voir le message
    Salut,

    Où as tu lu cette information ?
    Directement sur une lecture chez symfony. Sur le blog si je dit pas de bétise...

Discussions similaires

  1. Système d'authentification User/password
    Par Jihzz dans le forum VB.NET
    Réponses: 10
    Dernier message: 29/01/2012, 10h35
  2. [Administration] authentification user/mdp mysql
    Par bennyboy dans le forum Subversion
    Réponses: 3
    Dernier message: 02/04/2008, 16h18
  3. [Système]Récuperer le User XP par code
    Par tieumss dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/04/2007, 14h00
  4. [Système] Problème authentification site
    Par bilowlex dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2007, 08h52
  5. authentification user+pass avec pg_dump
    Par radium dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/07/2005, 12h47

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