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 :
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
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 }
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.
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"
le User Provider :
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.
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 jappelle 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'; } }
Je suis complétement bloqué, merci du coup de main.
Partager