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 :

Authentification avec un custom provider


Sujet :

Symfony PHP

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut Authentification avec un custom provider
    Bonjour,

    Je suis en train de mettre en place des services REST dans mon application.
    Mon application fonctionne déjà avec FOSUserBundle et j'ai ajouté le FOSRESTBundle.
    J'ai aussi suivi la doc http://symfony.com/doc/current/cookb..._provider.html pour créer mon propre service d'authentification.
    Si on se connecte en mode "REST" avec un user/password valide, pas de souci. Si le password ou User n'existe pas, ça ne marche pas => normal
    Mon problème est si le user est disabled ou locked ou expired, dans ces cas je n'ai pas de retour comme quoi le user ne peut pas se connecter et donc il se connecte sans problème.
    Est-ce que dans mon custom Provider il faut que j’appelle spécifiquement le UserChecker de symfony ? il n'est pas sensé le faire tout seul ?
    Merci de votre aide.
    Jérôme

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Bonjour j'ai avancé dans mes recherches et j'ai trouvé la classe UserChecker qui fait partie de Symfony\Component\Security\Core\User\UserChecker et qui fait ce que je veux...
    Du coup dans mon Provider, j'instancie un object UserChecker
    Et dans mon authenticate j'apelle les méthodes preAuth et postAuth et ça fonctionne.
    Voila ce que ca donne :
    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
     
    class WsseProvider implements AuthenticationProviderInterface
    {
        private $userProvider;
        private $cacheDir;
        private $userChecker;
     
        public function __construct(UserProviderInterface $userProvider, $cacheDir)
        {
            $this->userProvider = $userProvider;
            $this->cacheDir     = $cacheDir;
            $this->userChecker  = new UserChecker();
        }
     
        public function authenticate(TokenInterface $token)
        {
            $user = $this->userProvider->loadUserByUsername($token->getUsername());
     
            if(!$user){
                throw new AuthenticationException("Bad credentials... Did you forgot your username ?");
            }
     
            if($user){
                // on check les preAuth
                $this->userChecker->checkPreAuth($user);
            }
     
            if ($user && $this->validateDigest($token->digest, $token->nonce, $token->created, $user->getPassword())) {
                $authenticatedToken = new WsseUserToken($user->getRoles());
                $authenticatedToken->setUser($user);
     
                // on check les postAuth
                $this->userChecker->checkPostAuth($user);
     
                return $authenticatedToken;
            }
     
            throw new AuthenticationException('The WSSE authentication failed.');
        }
     
        protected function validateDigest($digest, $nonce, $created, $secret)
        {...
        }
     
        public function supports(TokenInterface $token)
        {
            return $token instanceof WsseUserToken;
        }
    }
    Ca vous parait bien ?
    Merci.
    Jérôme

Discussions similaires

  1. [2.x] Problème d'authentification avec un User Provider personnalisé
    Par HellDude dans le forum Symfony
    Réponses: 2
    Dernier message: 09/03/2012, 19h00
  2. prob d'authentification avec Java Script !!!!!
    Par King_T dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/05/2006, 19h18
  3. Réponses: 2
    Dernier message: 10/05/2006, 07h50
  4. Pas de fenètre d'authentification avec .htaccess
    Par damjal dans le forum Apache
    Réponses: 2
    Dernier message: 02/11/2005, 08h40
  5. [MySQL] mécanisme d'authentification avec BD
    Par lalyly dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/10/2005, 13h26

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