Bonjour,

Débutant sous SF2 je me heurte à un problème en essayant d'authentifier un utilisateur sur mon site via un User Provider personnalisé.

Je n'utilise pas FOSUserBundle ou autre car mes utilisateurs proviennent d'un web service.

J'ai suivis au mieux le cookbook de SF2 mais rien à faire, j'ai toujours l'erreur "The presented password is invalid."

voici mon code :

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
 
# app/config/security.yml
 
    encoders:
        MonProjet\WebserviceUserBundle\Security\User\WebserviceUser:
            algorithm: plaintext
 
    providers:
        webservice:
          id: webservice_user_provider
 
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
 
        secured_area:
            pattern:    ^/
            anonymous: ~
 
            form_login:
                login_path:  /login
                check_path:  /login_check
 
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_AUTHENTICATED }
mes routes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
# app/config/routing.yml
 
WebserviceUserBundle:
    resource: "@WebserviceUserBundle/Resources/config/routing.yml"
 
login:
    pattern:   /login
    defaults:  { _controller: MonProjetBundle:Security:login }
login_check:
    pattern:   /login_check
 
MonProjetBundle:
    resource: "@MonProjetBundle/Resources/config/routing.yml"
Je ne vous met pas le code du contrôleur de sécurité, du template login et de ma classe utilisateur qui sont exactement comme le cookbook.

le User Provider :
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
 
<?php
 
namespace MonProjet\WebserviceUserBundle\Security\User;
 
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 MonProjet\SoapclientBundle\Entity\S_Client;
 
class WebserviceUserProvider implements UserProviderInterface
{
 
    public function loadUserByUsername( $username )
    {
        //--------------------Appel au web service----------------------
        //--------------------------------------------------------------    
        //$user = ...
        // ici j’appelle le web service en connectant l'utilisateur, je récupère en retour un tableau $user
 
        if ( $user )
        {
            $userPassword = $user->passwordMd5;
            $roles = array( 'ROLE_AUTHENTICATED' );
            $newUser = new WebserviceUser( $username, $userPassword, NULL, $roles );
            return $newUser;
        }
        else
        {
            throw new UsernameNotFoundException( sprintf( 'Username "%s" does not exist.', $username ) );
        }
    }
 
    public function refreshUser( UserInterface $user )
    {
        if ( !$user instanceof WebserviceUser )
        {
            throw new UnsupportedUserException( sprintf( 'Instances of "%s" are not supported.', get_class( $user ) ) );
        }
 
        return $this->loadUserByUsername( $user->getUsername() );
    }
 
    public function supportsClass( $class )
    {
        return $class === 'MonProjet\WebserviceUserBundle\Security\User\WebserviceUser';
    }
 
}
la connexion au web service se fait bien, je récupère le tableau comme prévu mais l'authentification de l'utilisateur sur mon site ne se fait pas et j'ai toujours la même erreur. Je ne comprend pas bien le fonctionnement de la redirection vers /login_check qui est géré par le kernel SF2 et ça ne m'aide pas à débugger tout ça.

Je suis complétement bloqué, merci du coup de main.