3

このプロジェクトに基づいて、openID を FOSUserBundle と統合しようとしています: http://symfony2bundles.org/diegogd/fosuser-fpopenid

残念ながら、それらはエラーです。1つは設定の問題でした(試してみたい人向け):src/SC/UsersBundle/Resources/config/routing/security.xmlの8行目はSCUsersBundle:Security:loginを読む必要があります

これは、プロジェクトが完了しなかったことを示唆しています。それが解決された後、「SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email' cannot be null」が表示されます。これは、User オブジェクトがシリアル化されており、何らかの理由で FOSUserBundle に電子メールが含まれていないことが原因のようです「シリアル化」メソッドで。

その後、他のいくつかのプロパティがオーバーライド メソッド (「id」を含む) に含められた後、システムは既存のエントリを更新する代わりに新しいエントリを作成しようとします。

何か案は?

4

2 に答える 2

1

FOSUserBundle の InteractiveLoginListener でのユーザー オブジェクトのシリアル化解除に問題があります。今のところ、手動​​でセキュリティ トークンを設定し、ユーザーを 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」は、ユーザーに最終的に表示させたい内部ランディング ページです。

FOSUserBundle の InteractiveLoginListener::onSecurityInteractiveLogin() が呼び出されないため、最終ログイン時刻は自動的に更新されないことに注意してください。

これは、makasim が調査している既知の問題です: https://github.com/formapro/FpOpenIdBundle/issues/5

于 2011-10-28T21:27:44.847 に答える
0

master ブランチには問題の修正が含まれています

于 2012-03-27T09:20:33.447 に答える