Problème d'authentification avec un User Provider personnalisé
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:
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:
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:
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';
}
} |
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.