FOSUserBundle
Neo4j データベースで動作するように調整しようとしていますが、動作していないようです。自分のユーザーシステムをうまく実装しようと長い間試みた後 ( Symfony2 で NEO4j をセットアップする) FOSUserBundle
、.
次の記事とリポジトリを使用しました。
https://github.com/ikwattro/Neo4jUserBundle
私はこれを取り、すべてのファイルを私のUserBundle
. を変更しましたnamespaces
。
ここからグラフ マネージャーを取得しました: https://github.com/ikwattro/KwattroNeo4jOGMBundle
残りについては、FOSUserBundle
ドキュメントに従いました。
登録フォームに移動すると、すべてのフィールドが表示され、希望する資格情報を入力できるようになりました。これは機能します。[送信] をクリックすると、成功ページにリダイレクトされ、アラート オーバーレイが表示されます。
Web デバッグ ツールバーの読み込み中にエラーが発生しました (500: 内部サーバー エラー)。プロファイラーを開きますか?
次にプロファイラーに入ると、作成したばかりのユーザーとして正常に承認され、ログインしていることがわかります。データもneo4j
データベースに正常に保存されました。
ここでの問題は、Symfony プロジェクトの他のページに移動すると、再び Anonymous としてログインすることです。ログインページに移動すると、フォームは正しく表示されますが、常に返されます: Invalid credentials。
セッションまたはセキュリティに問題があるのではないでしょうか?
これは私のsecurity.ymlです:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
Neo4jUserBundle\Entity\User: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: neo4j.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
この情報が役立つかどうかはわかりませんが、Request
登録直後 (ユーザーがまだ正しく認証されている場合) のプロファイラーでは、次のセッション情報が表示されます。
Session Metadata
Key Value
Created Tue, 21 Jul 15 17:27:34 +0200
Last used Tue, 21 Jul 15 17:27:34 +0200
Lifetime 0
Session Attributes
Key Value
_csrf/authenticate A_H4Ul1XHFYoxQdOirdmbBQRRCJ01Xh8EkGeC6Y7xw0
_csrf/registration OAXAXhfhcN6z0WekMN0fk8zg4ikk5uCCZBlvhy8DyVY
_security.last_username test
_security_main C:74:"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":444:{a:3:{i:0;N;i:1;s:4:"main";i:2;s:404:"a:4:{i:0;C:32:"neo4jProxyUserBundle_Entity_User":192:{a:9:{i:0;s:60:"$2y$13$e49oj61cdjk88kk040wg8exlwqVzbdQB5IVNG18Wqcbe.EW8KXi72";i:1;s:31:"e49oj61cdjk88kk040wg8kcc4cg40c4";i:2;s:4:"test";i:3;s:4:"test";i:4;b:0;i:5;b:0;i:6;b:0;i:7;b:1;i:8;i:66;}}i:1;b:1;i:2;a:1:{i:0;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"Symfony\Component\Security\Core\Role\Rolerole";s:9:"ROLE_USER";}}i:3;a:0:{}}";}}
Flashes
Key Value
success [0 => registration.flash.user_created, 1 => registration.flash.user_created, 2 => registration.flash.user_created, 3 => registration.flash.user_created, 4 => registration.flash.user_created, 5 => registration.flash.user_created, 6 => registration.flash.user_created, 7 => registration.flash.user_created, 8 => registration.flash.user_created]
ヘルプやヒントをいただければ幸いです。
更新 [2015.07.21]
リポジトリを作成しました: https://github.com/JoranBeaufort/Neo4jUserBundle (初めて GitHub を使用したときにこれが機能することを願っています)
セッション処理に何か問題があると思いますか?
指摘すべきもう 1 つのことは、依存性注入は何もしていないように見えるということです。私はいくつかの重要なものを見逃しているに違いありません。
Neo4jUserBundle
箱から出してすぐに動作しFOSUserBundle
、Symfony プロジェクトの構成ファイルで構成できる を提供できれば素晴らしいことです。データベースでの認証も非常に重要です (ユーザー名とパスワードを使用して に接続しますneo4j
)。
更新 [2015.07.22]
を変更し、bundlename
ようやく が機能するようになったと思いますDependencyInjection
。よくわかりませんが、クラスの命名方法に問題があったと思います。
私もあなたが提案したことを試しましたfindUserById
。ルートmyapp.com/neo4juser/debug/finduserbyid/{id}
を取得し、メソッドを使用しfindUserById
てユーザーを返すコントローラーを作成しました。これは機能しています。Neo4j データベースに、ID = 68、email=test@test.test のユーザーがいます。ここで入力するmyapp.com/neo4juser/debug/finduserbyid/68
と、ページが読み込まれ、そのユーザーの正しい電子メールが表示されます。
TWIG はここにあります: https://github.com/JoranBeaufort/Neo4jUserBundle/blob/master/Resources/views/Debug/finduserbyid.html.twig
ここのコントローラー: https://github.com/JoranBeaufort/Neo4jUserBundle/blob/master/Controller/DebugController.php
のメソッドはUserManager
、目的のオブジェクトを返しているようです。
これは、ログインが機能しない理由を理解するのに役立ちますか? シリアル化は、エラーまたは暗号化の種類と関係がありますか? それともCSRFと関係があるのでしょうか? さらなるヒントはありますか?
更新 [2015.07.23]
プロバイダーとして使用し、ユーザーin_memory
を設定するとin_memory
、ログインが機能します。これで、問題をプロバイダーに絞り込みました。
私は近づいています!dev.log ファイルのエラーは次のようになります。
[2015-07-23 17:11:54] security.INFO: Authentication request failed. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(code: 0): Bad credentials. at bla/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php:73, Symfony\\Component\\Security\\Core\\Exception\\UsernameNotFoundException(code: 0): Username \"test\" does not exist. at bla/src/Neo4jUserBundle/Security/UserProvider.php:42)"} []
重要なのは、「Username "test" が存在しない」という部分です。これは、ユーザー プロバイダーで何かが機能していないことを意味していると推測しています。問題の原因を特定できる人はいますか? 私が呼び出しているプロバイダは、https ://github.com/JoranBeaufort/Neo4jUserBundle/tree/master/Security にあります。