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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 é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

  8. #8
    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...

  9. #9
    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.

  10. #10
    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 ?

  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
    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 ?

+ 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