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 :

Méthodologie BackOffice Admin [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut Méthodologie BackOffice Admin
    Bonjour,

    Je commence sur Symfony2 et j'aimerai me faire un back office pour mon site. Je suis bien sur aller sur la doc et google et FOSUserbundle est sortie. Cependant après x heures à le mettre en place. Il ne fait pas ce que je souhaite, je m'explique.

    Je souhaite avoir un système d'authentification dès lors qu'on va sur url /admin. J'ai essayé de changer le pattern dans securty.yml ... ... Sans succes. De plus je trouve que FOUSerbundle et plus pour le type utilisateur classique tel qu'un forum (peut être que je me trompe).

    Pouvez-vous m'aider afin que je continuer mon projet.
    Je vous en remercie par avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut
    Bon alors j'ai du nouveau. Après avoir lu 100 fois et presque toutes la doc sur la sécurité j'ai réussi seul à me faire ce que je veux.

    J'ai fais ceci :

    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
    jms_security_extra:
        secure_all_services: false
        expressions: true
     
    security:
        encoders:
            Cedam\BackBundle\Entity\User:
                algorithm:        sha1
                encode_as_base64: false
                iterations:       1
     
        role_hierarchy:
            ROLE_ADMIN:       ROLE_USER
            ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
     
        providers:
            administrators:
                entity: { class: CedamBackBundle:User, property: username }
     
        firewalls:
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
     
            secured_area:
                pattern:    ^/admin
                anonymous: ~
                form_login:
                    login_path:  /login
                    check_path:  /login_check
     
        access_control:
             - { path: ^/admin, roles: ROLE_ADMIN }
             - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
    Ensuite j'ai fait ç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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    namespace Cedam\BackBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Security\Core\User\UserInterface;
     
    /**
     * 
     *
     * @ORM\Table(name="admin")
     * @ORM\Entity(repositoryClass="Cedam\BackBundle\Entity\UserRepository")
     */
    class User implements UserInterface
    {
        /**
         * @ORM\Column(type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @ORM\Column(type="string", length=25, unique=true)
         */
        private $username;
     
        /**
         * @ORM\Column(type="string", length=32)
         */
        private $salt;
     
        /**
         * @ORM\Column(type="string", length=40)
         */
        private $password;
     
        /**
         * @ORM\Column(type="string", length=60, unique=true)
         */
        private $email;
     
        /**
         * @ORM\Column(name="is_active", type="boolean")
         */
        private $isActive;
     
        public function __construct()
        {
            $this->isActive = true;
            $this->salt = md5(uniqid(null, true));
        }
     
        /**
         * @inheritDoc
         */
        public function getUsername()
        {
            return $this->username;
        }
     
        /**
         * @inheritDoc
         */
        public function getSalt()
        {
            return $this->salt;
        }
     
        /**
         * @inheritDoc
         */
        public function getPassword()
        {
            return $this->password;
        }
     
        /**
         * @inheritDoc
         */
        public function getRoles()
        {
            return array('ROLE_USER');
        }
     
        /**
         * @inheritDoc
         */
        public function eraseCredentials()
        {
        }
    }
    Ensuite ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    cedam_back:
        resource: "@CedamBackBundle/Resources/config/routing.yml"
        prefix:   /
     
    cedam_front:
        resource: "@CedamFrontBundle/Resources/config/routing.yml"
        prefix:   /
     
    login:
        pattern:   /login
        defaults:  { _controller: CedamBackBundle:Security:login }
    login_check:
        pattern:   /login_check
    Et ceci :

    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
    namespace Cedam\BackBundle\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\Security\Core\SecurityContext;
     
    class SecurityController extends Controller
    {
        public function loginAction()
        {
            $request = $this->getRequest();
            $session = $request->getSession();
            // get the login error if there is one
            if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
            } else {
                $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
                $session->remove(SecurityContext::AUTHENTICATION_ERROR);
            }
            return $this->render('CedamBackBundle:Security:login.html.twig', array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error,
            ));
        }
     
     
    }
    Puis le template 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
    {% if error %}
        <div>{{ error.message }}</div>
    {% endif %}
     
    <form action="{{ path('login_check') }}" method="post">
        <label for="username">Login :</label>
        <input type="text" id="username" name="_username" value="{{ last_username }}" />
     
        <label for="password">Mot de passe :</label>
        <input type="password" id="password" name="_password" />
     
        {#
            Si vous voulez controler l'URL vers laquelle l'utilisateur est redirigé en cas de succès
            (plus de détails ci-dessous)
            <input type="hidden" name="_target_path" value="/account" />
        #}
     
        <button type="submit">login</button>
    </form>
    Dès que je vais sur /admin on me renvoi bien sur /login. Super mais quand je rentre identifiant ca va sur la page login_check et la j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration?
    Sur la doc rien sur login_check et sur google cela dit que login_check et une fonction propre de Symfony2 et qu'il dois la connaitre...

    Quelqu'un pour m'aider ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut
    Bon ok je viens de trouver une réponse. Il faut ajouter /admin/ dans le check_patch dans le secured_area

    Tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    secured_area:
                pattern:    ^/admin
                anonymous: ~
                form_login:
                    login_path:  /login
                    check_path:  /admin/login_check
    Mais maintenant le problème c'est que j'ai tous le temps une erreur quand j'essaye de me connecter avec l'user que j'ai dans ma bdd.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut
    Bon après des galère j'ai réussi mais la solution est étrange...

    D'après ce que j'ai lu il faut mettre dans ma classe user le getSalt un return ''';

    Si quelqu'un peut m'expliquer pourquoi ? je précise dans ma bdd il y a un salt

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 85
    Par défaut
    Je pense avoir trouvé la réponse. Car quand on crypt un mot de passe, normalement on y ajoute le Salt=> Token/grain de sel.

    J'espère que ceci va aider du monde.

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

Discussions similaires

  1. [Shareware] Logiciel d'admin MySQL : SQLyog
    Par Marc Lussac dans le forum Outils
    Réponses: 27
    Dernier message: 11/03/2008, 08h50
  2. Réponses: 11
    Dernier message: 11/07/2003, 16h47

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