OpenID с FOSUserBundle в Symfony2 - PullRequest
       24

OpenID с FOSUserBundle в Symfony2

3 голосов
/ 23 октября 2011

Я пытаюсь интегрировать openID с FOSUserBundle на основе этого проекта: http://symfony2bundles.org/diegogd/fosuser-fpopenid

К сожалению, там их должны быть ошибки. Одним из них была проблема конфигурации (для людей, которые хотят попробовать): Строка 8 в src / SC / UsersBundle / Resources / config / routing / security.xml должна читаться SCUsersBundle: Безопасность: Логин

Это намекает на то, что проект так и не был завершен. После того, как это решено, я получаю «SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'email' не может быть пустым" » По-видимому, это связано с тем, что объект User сериализован, и по какой-то причине FOSUserBundle не включает электронную почту в метод «serialize».

После этого и некоторых других свойств, включенных в переопределяющий метод (включая «id»), система по-прежнему хочет создать новую запись вместо обновления существующей.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Существует проблема с десериализацией пользовательских объектов в InteractiveLoginListener FOSUserBundle.На данный момент вы можете вручную установить токен безопасности и перенаправить пользователей на другую страницу, а не отправлять их обратно на fos_user_security_check.

Например, вместо этого:

// IMPORTANT: It is required to set a user to token (UserInterface)
$newToken = new OpenIdToken($token->getOpenIdentifier(), $user->getRoles());
$newToken->setUser($user);

$tokenPersister->set($newToken);

// IMPORTANT: It is required make a redirect to `login_check` with parameter `openid_approved`
return $this->redirect($this->generateUrl('login_check_route', array('openid_approved' => 1)));

Сделайте это:

// IMPORTANT: It is required to set a user to token (UserInterface)
$newToken = new OpenIdToken($token->getOpenIdentifier(), $user->getRoles());
$newToken->setUser($user);

$tokenPersister->set($newToken);
$this->get('security.context')->setToken($newToken);

return $this->redirect($this->generateUrl('authenticated_user_dashboard'));

Где «authenticated_user_dashboard» - это любая внутренняя целевая страница, на которой вы хотите, чтобы пользователи заканчивали.

Обратите внимание, что поскольку InteractiveLoginListener :: onSecurityInteractiveLogin () в FOSUserBundle не вызывается, время последнего входа в систему не будетобновляться автоматически.

Это известная проблема, которую исследует makasim: https://github.com/formapro/FpOpenIdBundle/issues/5

0 голосов
/ 27 марта 2012

Основная ветвь содержит исправления для проблемы

...