Ho un provider utente personalizzato e entità utente che ho usato con successo in Symfony 2.2. Ma ora ho aggiornato a 2.3, e ho capito che la funzionalità "ricordami di me" è rotta. Così ho creato una nuova app sf2 e un test funzionale. Il test è passato quando ho usato i valori predefiniti Acme \ DemoBundle. Ma quando ho aggiunto il mio provider ha iniziato a fallire di nuovo. Ecco il test:Il test "Ricordami" non funziona quando si utilizzano provider utente personalizzato, entità utente, ecc.
<?php
namespace Acme\DemoBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\BrowserKit\Cookie;
class DemoControllerTest extends WebTestCase
{
public function testRemember()
{
$client = static::createClient();
$securedPageUri = '/user/settings/account';
$securedPageFilter = 'html:contains("New Password")';
$loginPageFilter = 'html:contains("Login")';
$username = '[email protected]';
$password = 'test';
/*
$securedPageUri = '/demo/secured/hello/World';
$securedPageFilter = 'html:contains("Hello resource secured for admin only.")';
$loginPageFilter = 'html:contains("Login")';
$username = 'admin';
$password = 'adminpass';
*/
// Go to Secured page, and be redirected to Login page
$client->request('GET', $securedPageUri);
$crawler = $client->followRedirect();
$this->assertGreaterThan(0, $crawler->filter($loginPageFilter)->count());
// Try to log in, and be redirected to Secured page
$form = $crawler->selectButton('Login')->form();
$form['_username'] = $username;
$form['_password'] = $password;
$form['_remember_me'] = 1;
$client->submit($form);
$crawler = $client->followRedirect();
$this->assertGreaterThan(0, $crawler->filter($securedPageFilter)->count());
// Remove all the cookies, but keep the "remember me" cookie
$remembermeCookie = $client->getCookieJar()->get('REMEMBERME');
$client->restart();
$client->getCookieJar()->set($remembermeCookie);
// Go to Secured page, this time we should be allowed in
$client->followRedirects();
$crawler = $client->request('GET', $securedPageUri);
//$this->assertTrue($client->getResponse()->isSuccessful());
$this->assertEquals(0, $crawler->filter($loginPageFilter)->count(), "Redirected to Login page"); // THIS IS WHERE THE TEST FAILS
$this->assertGreaterThan(0, $crawler->filter($securedPageFilter)->count());
}
}
Il test funziona bene, ho provato il test troppo manualmente: accedo, eliminare i cookie di sessione, e provo ad accedere alla pagina protetta con il biscotto ricordati di me. Il ricordami che il cookie viene eliminato e che mi viene reindirizzato alla pagina di accesso: S
Qualche idea sul perché questo potrebbe accadere? Il mio provider non fa nulla di strano, semplicemente prende l'utente dal database come al solito. Perché sulla Terra influisce la funzionalità "ricordami di me"? Ci sono stati cambiamenti di cui non sono a conoscenza? Non sto utilizzando un provider di autenticazione personalizzato, solo il fornitore di utenti.
Oh, e qui è il registro, con la sicurezza grep
[2013-07-17 15:18:49] security.DEBUG: Username "[email protected]" was reloaded from user provider. [] []
[2013-07-17 15:18:49] security.DEBUG: Write SecurityContext in the session [] []
[2013-07-17 15:18:49] security.DEBUG: Remember-me cookie detected. [] []
[2013-07-17 15:18:49] security.WARNING: User class for remember-me cookie not supported. [] []
[2013-07-17 15:18:49] security.DEBUG: Clearing remember-me cookie "REMEMBERME" [] []
[2013-07-17 15:18:49] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2013-07-17 15:18:49] security.DEBUG: Access is denied (user is not fully authenticated) by "/srv/www/dev/public/remember/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 73; redirecting to authentication entry point [] []
[2013-07-17 15:18:49] security.DEBUG: Calling Authentication entry point [] []
[2013-07-17 15:18:49] security.DEBUG: Write SecurityContext in the session [] []
[2013-07-17 15:18:49] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2013-07-17 15:18:49] security.DEBUG: Write SecurityContext in the session [] []
UPDATE: E solo quando ho incollato il registro ho notato che di avvertimento. Ad ogni modo, sai come aggiustarlo?
UPDATE 2: Se utilizzo il provider utente predefinito, ma ancora la mia classe utente, funziona correttamente. Il messaggio di errore è molto fuorviante.
Hai mai risolto questo? –