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 :

tester l'accés à une page sécurisée [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut tester l'accés à une page sécurisée
    voila, j'ai une action qui est sécurisé (Credentials: admin). si je teste ma page sans login j'ai bien un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    $browser->
      get('/GrpeChqDej/index')->
      with('request')->begin()->
        isParameter('module', 'GrpeChqDej')->
        isParameter('action', 'index')->
      end()->
     
      with('response')->begin()->
        isStatusCode(200)->
        checkElement('table', '!/This is a temporary page/')->
      end()
    ;
    resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # get /GrpeChqDej/index
    ok 1 - request parameter module is GrpeChqDej
    ok 2 - request parameter action is index
    not ok 3 - status code is 200
    #     Failed test (./lib/vendor/symfony/lib/test/sfTesterResponse.class.php at line 412)
    #            got: 401
    #       expected: 200
    ok 4 - response selector body does not match regex /This is a temporary page/
    je voudrait donc initialisé un user ayant les droits d'admin et tester si je peut ouvrir la page.
    j'ai pas trouver sur le net et la page de sensio concernant sfTestUser est vide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Tout d'abord : c'est une bonne chose que tu te lances dans les tests
    Juste un conseil : fixe bien tes scénarios d'utilisation et ton routing avant de les faire. Car si tu les changes plus tard, c'est assez lourd de maintenir des tests fonctionnels.


    Sinon, à la place de sfTestUser, tu trouveras plus de choses sur : sfTesterBrowser.

    Il te permet notamment de simuler la soumission de formulaire (donc aussi : la connexion de l'utilisateur) avec une méthode : click.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $b->get('/foobar/edit?id=1')->
        click('go', array('name' => 'dummy', 'password' => 'alsoDummy'))->
        isRedirected()->   // Check that request is redirected
        followRedirect();    // Manually follow the redirection
    Pour info, tu as un plugin swFunctionalTestGenerationPlugin qui te permet de faire l'essentiel de ton travail : tu peux enregistrer directement dans ton navigateur des scénarios de test.
    Bon, le plugin n'est pas complètement parfait et tu auras sans doute des corrections à apporter, mais il te mâche une bonne partie du travail.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    j'ai trouvé ç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
     
    class sfGuardTestFunctional extends sfTestFunctional {
    public function signinOk($user_data)
       {	
    		return $this->
        	info(sprintf('Connexion with login : "%s" and password "%s"
    		should be ok OK.', $user_data['username'], $user_data['password']))->
    		get('/guard/login')->
    		click('login',array('signin'=>$user_data))->
     
    		with('form')->begin()->
    			hasErrors(false)->
    		end()->
     
    		with('user')->begin()->
    	 	   isCulture('en')->
    	    	isAuthenticated(true)->
    	   end()->
     
           with('request')->begin()->
     	      isParameter('module', 'sfGuardAuth')->
    		  isParameter('action', 'signin')->
    		end()->
     
    		isRedirected()
    		;
    	}	
    }
    sauf que quand je teste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $browser = new sfGuardTestFunctional(new sfBrowser());
     
    $browser->signinOk(array('username'=>'admin','password'=>'admin'));
    j'ai ce message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    > Connexion with login : "admin" and password "admin"
    		should be ok OK.
    # get /guard/login
    # get /guard/login
     
     
      no form has been submitted.
    jquelqu'un aurait une idée ?

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    sympo ton plugin sauf que pour un débutant en test, pas évident de debugguer le débuggeur

    j'ai juste fait un login a partir de ma page d'acceuil:
    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
     
    <?php
     
    include(dirname(__FILE__).'/../../bootstrap/functional.php');
     
    $browser = new sfTestFunctional(new sfBrowser());
    $test    = $browser->test();
    $conn    = Doctrine::getConnectionByTableName('your_model');
     
    $conn->beginTransaction();
    $browser
      ->call('/', 'GET', array())
      ->with('request')->begin()
        ->isParameter('module', 'static')
        ->isParameter('action', 'index')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(200)
      ->end()
    ;
     
    $browser
      ->call('/guard/login', 'GET', array())
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(401)
      ->end()
    ;
     
    $browser
      ->call('/guard/login', 'POST', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
    ))
      /*   ->get('/guard/login')
      ->click('alt or value of submit here', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
    )) */ 
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
    ;
    $browser
      ->with('response')->begin()
        ->isRedirected(1)
        ->isStatusCode(302)
      ->end()
      ->followRedirect()
    ;
     
    $browser
      ->with('request')->begin()
        ->isParameter('module', 'static')
        ->isParameter('action', 'index')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(200)
      ->end()
    ;
     
     
    $conn->rollback();
    le resultat:
    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
     
    # get /
    ok 1 - request parameter module is static
    ok 2 - request parameter action is index
    ok 3 - status code is 200
    # get /guard/login
    ok 4 - request parameter module is sfGuardAuth
    ok 5 - request parameter action is signin
    ok 6 - status code is 401
    # post /guard/login
    ok 7 - request parameter module is sfGuardAuth
    ok 8 - request parameter action is signin
    not ok 9 - page redirected
    #     Failed test (./lib/vendor/symfony/lib/test/sfTesterResponse.class.php at line 432)
    not ok 10 - status code is 302
    #     Failed test (./lib/vendor/symfony/lib/test/sfTesterResponse.class.php at line 412)
    #            got: 200
    #       expected: 302
     
     
      The request was not redirected.
    je pense que le probleme vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $browser
      ->with('response')->begin()
        ->isRedirected(1)
        ->isStatusCode(302)
      ->end()
      ->followRedirect()
    ;
    mais est ce un bug du code generer ou un bug de mon appli.. mystere

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Concernant ton dernier post, je te conseille de décommenter le click et de commenter la partie précédente :
    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
    /*  ->call('/guard/login', 'POST', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
    )) */
      ->get('/guard/login')
      ->click('alt or value of submit here', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
    ))
    Ce sont deux méthodes pour faire la même chose. L'une passant dans certains cas, l'autre dans d'autres, il laisse la possibilité de choisir laquelle lancer.

    Certes, débugger quelque chose dont on n'a pas l'habitude est toujours complexe, mais tu verras qu'il s'agit souvent des mêmes "bugs" qui reviennent. A moyen terme, tu vas gagner beaucoup de temps

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    meme punition

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Oh !!
    Petite question toute bête : tu remplaces bien le contenu de 'alt or value of submit here' par le nom de ton bouton ?

    Autre question toute bête : tu as bien un log/pass "admin/admin" qui réussit quand tu es dans ton navigateur ?

    Sinon, de manière générale il faut peut-être évité les call et mettre des get à la place. Mais je ne pense pas que ici ce soit ça ton problème.

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    oui oui j'ai remplace le alt... par login. Qui est le texte de mon lien
    et admin/admin enfin celui qui est écrit dans la fonction est bien mon login
    j'ai viré tout les call, il en restait plus qu'un au tout début, même punition

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bon j'ai rajouté des test d'authentification et un test sur le form et effectivement il semble que le login ne fonctionne pas:
    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
    $browser = new sfTestFunctional(new sfBrowser());
    $test    = $browser->test();
    $conn    = Doctrine::getConnectionByTableName('your_model');
    
    $conn->beginTransaction();
    
    $browser
      ->call('/', 'GET', array())
      ->with('request')->begin()
        ->isParameter('module', 'static')
        ->isParameter('action', 'index')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(200)
      ->end()
    ;
    
    $browser
    	->get('/')
    	->with('user')->begin()
    	->isAuthenticated(false)            "Ligne Rajouté'
    	->end();
    $browser
      ->get('/guard/login')
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(401)
      ->end()
    ;
    
    $browser
      ->get('/guard/login')
      ->click('login', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
    )) 
      ->with('form')->begin()
      	->debug()
       ->end()
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('user')->begin()
    	->isAuthenticated()             "Ligne Rajouté'
      ->end()
    ;
    
    $browser
      ->with('response')->begin()
        ->isRedirected()
        ->isStatusCode(302)
      ->end()
      ->followRedirect()
    ;
    
    $browser
      ->with('request')->begin()
        ->isParameter('module', 'static')
        ->isParameter('action', 'index')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(200)
      ->end()
    ;
    
    
    $conn->rollback();
    résultat:
    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
    # get /
    ok 1 - request parameter module is static
    ok 2 - request parameter action is index
    ok 3 - status code is 200
    # get /
    ok 4 - user is not authenticated
    # get /guard/login
    ok 5 - request parameter module is sfGuardAuth
    ok 6 - request parameter action is signin
    ok 7 - status code is 401
    # get /guard/login
    # get /guard/login
                                   
      no form has been submitted.  
    ce qui m'inquiète c'est que tout ce que je trouve sur la toile concernant ce problème finissent en non résolu, si il n'est pas possible de tester des pages sécurisés, je peut rien tester

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    désole de me répondre a moi meme, mais je pense avoir trouvé la ou le bat blesse... Mais en même temps être sur un joli bug de symfony.
    bon j'ai remplacé l'appel du formulaire via le get par un call/post:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $browser
      ->call('/guard/login', 'POST', array (
      'signin' => 
      array (
        'username' => 'adminr',
        'password' => 'admin',
      ),
    ))
    ce qui me permet dans ce cas de bien simuler un form et j'ai bien une réponse a mon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ->with('form')->begin()
      	->debug()
      	->end()
    Et le résultat tant attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Form debug 
    Submitted values: array (  'username' => 'admin',  'password' => 'admin',)
    Errors: _csrf_token [Required.] username [The username and/or password is invalid.]
    Encore une fois je me retrouve bloqué par ce _csrf_token. Je sent que je vais te virer ce truc sur tout mes formulaires...

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Désolé de ne pouvoir t'aider mieux : pour avoir changer de boîte très récemment, je n'ai plus du tout de code de test fonctionnel sous les yeux

    Ceci dit, je sais qu'il est tout à fait possible de tester le login avec ce système, pour l'avoir fait il y a quelques mois. Cependant, le problème de _csrf_token est un problème que je me souviens avoir été récurrent, et peut-être n'est-il pas résolvable simplement autrement que par un : disableCRSFProtection sur ton formulaire.

    Je te conseillerais donc de le désactiver directement dans ton formulaire, de lancer tes tests fonctionnels, et d'aviser ensuite.

  12. #12
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    j'ai réussi a trouver concernant le csrf:
    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
     
    $browser
      ->call('/guard/login', 'POST', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
      array('_with_csrf' => true),
      ))
      ->with('form')->begin()
      	->debug()
      	->end()
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('user')->begin()
    	->isAuthenticated()
      ->end()
    ;
    sauf que j'ai un probleme de username now:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Form debug 
    Submitted values: array (  'username' => 'admin',  'password' => 'admin',)
    Errors: username [The username and/or password is invalid.]
    bien entendu je suis certain de mon username !!!!

    par contre mon password je l'ai mis en claire dans mes fixtures, ça peut pas provenir de la ?

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Merci pour le tip :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      array('_with_csrf' => true),
    Ça reste plus propre que la solution que je t'avais proposée.

    Quelle est la valeur stockée en base pour ton password ? La valeur en clair ou bien la valeur hachée ?
    Quand tu es dans l'interface de ton navigateur, la connexion marche correctement j'imagine ?

  14. #14
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    au debut en clair.
    laje l'ai haché:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     0:
        first_name: admin
        last_name: admin
        email_address: admin@google.com
        username: admin
        password: <?php echo sha1('admim') ?>
        contrat: 1
    même punition il bloque sur le username

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Lorsque je créé mes fixtures de sfGuardUser, je met mes login/password en clair dans les fixtures sans forcément le hachage sha1.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sfGuardUser:
      adminUser:
        first_name: prénom
        last_name: nom
        email_address: ...
        username: monLogin
        password: monPasswordEnClair
        is_super_admin: true
    et c'est le code du Model qui s'occupe ensuite du hachage.

    Est-ce aussi des sfGuardUser chez toi ?


    De toute façon, si tu peux te loguer dans ton navigateur, c'est que la valeur est bien hachée et base, et cela devrait a priori fonctionner aussi côté tests fonctionnels.

  16. #16
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    mon schema:
    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
     
    sfGuardUser: 
      actAs: [Timestampable]
      columns:
        first_name: string(255)
        last_name: string(255)
        email_address:
          type: string(255)
          notnull: true
          unique: true
        username:
          type: string(128)
          notnull: true
          unique: true
        algorithm:
          type: string(128)
          default: sha1
          notnull: true
        salt: string(128)
        password: string(128)
        is_active:
          type: boolean
          default: 1
        is_super_admin:
          type: boolean
          default: false
        last_login:
          type: timestamp
        matricule:
          type: integer
          unique: true           
        epass:
          type: string(20)
          unique: true      
        section_id: { type: integer }
        ......
    ma fixtures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sfGuardUser:
      1:
        first_name: admin
        last_name: admin
        email_address: admin@google.com
        username: admin
        password: admin
        is_super_admin: true
        contrat: 1
    le résultat dans la base:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'id', 'first_name', 'last_name', 'email_address', 'username', 'algorithm', 'salt', 'password', 'is_active', 'is_super_admin', 'last_login', 'matricule', 'epass', 'section_id', 'company_id', 'emailintranet', 'site_id', 'contrat', 'relationwithdupont', 'esi', 'grpe_chq_dej_list_id', 'startdate', 'gardenleavedate', 'offrolldate', 'created_at', 'updated_at'
    158, 'admin', 'admin', 'admin@google.com', 'admin', 'sha1', , 'admin', 1, 1, , , , , , , , '1', , 0, , , , , '2010-10-27 13:33:47', '2010-10-27 13:33:47'
    la valeur du password est en clair !!!

    mon fichier de test:
    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
     
    $browser = new sfTestFunctional(new sfBrowser());
    $test    = $browser->test();
    //$conn    = Doctrine::getConnectionByTableName('your_model');
     
    //$conn->beginTransaction();
     
    $browser
      ->call('/', 'GET', array())
      ->with('request')->begin()
        ->isParameter('module', 'static')
        ->isParameter('action', 'index')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(200)
      ->end()
    ;
     
    $browser
    	->get('/')
    	->with('user')->begin()
    	->isAuthenticated(false)
    	->end();
    $browser
      ->get('/guard/login')
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(401)
      ->end()
    ;
     
    $browser
      ->call('/guard/login', 'POST', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
      array('_with_csrf' => true),
      ))
      ->with('form')->begin()
      	->debug()
      	->end()
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('user')->begin()
    	->isAuthenticated()
      ->end()
    ;
    le résultat:
    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
     
    # get /
    ok 1 - request parameter module is static
    ok 2 - request parameter action is index
    ok 3 - status code is 200
    # get /
    ok 4 - user is not authenticated
    # get /guard/login
    ok 5 - request parameter module is sfGuardAuth
    ok 6 - request parameter action is signin
    ok 7 - status code is 401
    # post /guard/login
     Form debug 
    Submitted values: array (  'username' => 'admin',  'password' => 'admin',)
    Errors: username [The username and/or password is invalid.]
    je voit pas pourquoi il plante au niveau du username

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Déjà, si le password est en clair en base, c'est mauvais signe. Tu n'as pas répondu à ma question plus haut : réussis-tu à te connecter depuis ton navigateur ?
    (si le pass est en clair en base, ça m'étonnerait).

    Autre question : as-tu surchargé quoique ce soit dans le modèle de sfGuardUser (comme une surcharge du save) ?

    Sinon, je te conseillerais d'éviter de mettre '1' comme nom de fixture, mais plutôt : user1. Je ne suis pas sûr que ça ne puisse pas être source de bugs de mettre '1'.

    Donc, avant de régler le problème de ton test, il faut régler ça, car ça ne peut pas marcher :
    - quand tu entres ton login / password, il va hacher ton password ;
    - il va comparer cette valeur hachée à celle en clair en base, et forcément elles ne pourront pas être égales ;
    - du coup, il te refuse forcément la connexion.

  18. #18
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    quand je me log sur le site, ça fonctionne.
    Par contre si je modifie mon pwd, il est a ce moment la haché, avec d'ailleurs une valeur dans le champ salt, qui est null lors du chargement des fixtures.
    je n'ai pas surchargé la fonction save(), mais j'ai surchargé le schema de sfGuardUser

    j'ai remplace 1 par user1 dans mes fixtures.
    Toujours un message d'erreur sur le username.

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Bon, je dois avouer que je ne comprends pas tout du tout.

    Cependant : d'une part ce n'est pas propre de toucher directement au schema du plugin, ou de réécrire ses classes. Notamment, je me demande ce qu'il advient des méthodes de sfGuardUser : vu que tu réécris le schema de cette classe, tu vas générer dans ton projet des BaseClass qui n'étendent pas de celles de sfGuardUser. Du coup, normalement aucune des méthodes de sfGuardUser ne te sont accessibles.

    Je te conseillerais plutôt de créer des classes qui héritent de sfGuardUser et de travailler dessus (d'ailleurs, n'est-ce-pas ton sujet d'autres topics ?).

    Ceci dit, de manière générale, je commence à être un peu perdu

  20. #20
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    il est spécifié dans le readme de sfGuardUser que l'on peut surchargé la table sfGuardUser à condition de conserver tout les champs initiaux. ce que j'ai fait.
    De plus tout fonctionne en mode normal.

    merci de votre constance michel et bilbo, vous seriez pas la, ça fait longtemps que j'aurais laché l'affaire.

    Bon en faite quand j'ai surchargé sfGuardUser dans mon schema, je n'avais pas supprimé sa définition dans le schéma du plugin (d'ou doublon).
    Résultat, il ne me hachait pas le password (en plus d'autres joyeusetés que je n'ai pas détecter).
    La ou c'est drôle c'est que au niveau de l'appli, ça ne posait aucun problème, par contre en test, ça plantait.
    pour rappel je met mon code de test pour loguer un user:
    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
     
    $browser
    	->get('/')
    	->with('user')->begin()
    	->isAuthenticated(false)
    	->end();
    $browser
      ->get('/guard/login')
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('response')->begin()
        ->isStatusCode(401)
      ->end()
    ;
     
    $browser
      ->call('/guard/login', 'POST', array (
      'signin' => 
      array (
        'username' => 'admin',
        'password' => 'admin',
      ),
      array('_with_csrf' => true),
      ))  
      ->with('request')->begin()
        ->isParameter('module', 'sfGuardAuth')
        ->isParameter('action', 'signin')
      ->end()
      ->with('user')->begin()
    	->isAuthenticated()
      ->end()
    ;
     
    $browser
      ->with('response')->begin()
        ->isRedirected()
        ->isStatusCode(302)
      ->end()
      ->followRedirect()
    ;

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

Discussions similaires

  1. [Cookies] Pas plus d'un accès à une page?
    Par Davidabroad dans le forum Langage
    Réponses: 5
    Dernier message: 04/10/2006, 22h46
  2. Réponses: 4
    Dernier message: 28/09/2006, 13h37
  3. [MySQL] PB pour l'acces à une page
    Par lolodelp dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/07/2006, 11h27
  4. [Reseau] Accés à une page interne
    Par vincedjs dans le forum Apache
    Réponses: 4
    Dernier message: 02/02/2006, 10h20
  5. Bloquer l'accès à une page en fonction du navigateur
    Par 10-nice dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 30/08/2005, 15h29

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