Не удается начать сеанс в Symfony2 с UsernamePasswordToken

Я собираюсь быть сумасшедшим с ошибкой в ​​Symfony2.4 войти в систему с UsernamePasswordToken …

Я имею на своем сайте, чтобы автоматически регистрировать пользователей с помощью их URL и хэша их пользователя. Действие очень простое, и единственное, что я думаю (после некоторых проверок), это:

$token = new UsernamePasswordToken($user, $user->getPassword(), 'secured_area', $user->getRoles());
$this->get('security.context')->setToken($token);

При этом в некоторых случаях это работает (когда я пытаюсь, это всегда работает …), но в некоторых случаях не работает … Журнал в этих случаях говорит:

[2014-10-30 15:47:25] request.INFO: Matched route "_my_route" (parameters: "_controller": "MyController", "url": "my-url", "hash": "2f5fccc7b5fc2d41bbc3e1e469655f24f540e383", "_route": "_my_route") [] []
[2014-10-30 15:47:25] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2014-10-30 15:47:25] security.DEBUG: Write SecurityContext in the session [] []
[2014-10-30 15:47:25] request.CRITICAL: Uncaught PHP Exception RuntimeException: "Failed to start the session because headers have already been sent by "/route/app/bootstrap.php.cache" at line 1365." at /route/app/cache/prod/classes.php line 119 {"exception":"[object] (RuntimeException: Failed to start the session because headers have already been sent by \"/route/app/bootstrap.php.cache\" at line 1365. at /route/app/cache/prod/classes.php:119)"} []
[2014-10-30 15:47:25] security.DEBUG: Write SecurityContext in the session [] []

Почему заголовки уже отправлены? Почему только в некоторых случаях? Кто-нибудь знает часто случаи, когда это происходит?

Я много чего перепробовал: проверил, чтобы до этого не печаталось никаких символов, изменил брандмауэры в security.yml, положил сессии в файл на диске, …

Я думаю, что все в порядке.

Мой пользовательский объект:

class MyUser implements UserInterface, \Serializable
{
...
/**
* Serializes the user.
*
* The serialized data have to contain the fields used byt the equals method.
*
* @return string
*/
public function serialize()
{
return serialize(array(
$this->id,
$this->password,
$this->email
));
}

/**
* Unserializes the user.
*
* @param string $serialized The serialized string
*
* @return void
*/
public function unserialize($serialized)
{
list(
$this->id,
$this->password,
$this->email
) = unserialize($serialized);
}
...

security.yml

security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
MyProject\PublicBundle\Entity\MyUser:
algorithm:   sha1
iterations: 1
encode_as_base64: false

role_hierarchy:
ROLE_USER:        ROLE_PENDING
ROLE_ADMIN:       ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
main:
entity: { class: MyProject\PublicBundle\Entity\MyUser, property: email }

firewalls:
dev:
pattern:  ^/(_(profiler|wdt)|css|images|js)/
security: false

secured_area:
pattern:    ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
failure_path: /login
username_parameter: email
password_parameter: password
default_target_path: /login-redirect
logout:
path:   /logout
target: /
remember_me:
key:      "aSecretKey"lifetime: 321408000
path:     /
domain:   %domain%

config.yml (секция сессии была добавлена ​​после первых ошибок)

framework:
secret:          "%secret%"router:
resource: "%kernel.root_dir%/config/routing.yml"strict_requirements: ~
form:            ~
csrf_protection: ~
validation:      { enable_annotations: true }
templating:
engines: ['twig']
default_locale:  "%locale%"trusted_hosts:   ~
trusted_proxies: ~
session:
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/sessions"fragments:       ~
http_method_override: true

1

Решение

Это, вероятно, связано с тем, как вы пытаетесь сохранить токен в сеансе.

Вы используете сервис, как:

$token = new UsernamePasswordToken($user, $user->getPassword(), 'secured_area', $user->getRoles());
$this->get('security.context')->setToken($token);
$this->get('session')->set('_security_secured_area',serialize($token));

Автоматическая аутентификация пользователя после регистрации

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]