1

FOSUserBundleNeo4j データベースで動作するように調整しようとしていますが、動作していないようです。自分のユーザーシステムをうまく実装しようと長い間試みた後 ( 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 にあります。

4

2 に答える 2

0

2015 年 12 月 27 日現在の問題は、73 行目の UserManager が見つかったユーザーを返さないことです (void 関数です)。私はまだそれを試しておらず、数日間試していません。おそらくそれはもう求められていない答えですが、それが問題だと確信しています.

@return タグがあるため、IDE はこれを問題とはしません。

* Finds a user by username
 *
 * @param string $username
 *
 * @return UserInterface
 */
public function findUserByUsername($username)
{
    $this->findUserBy(array('usernameCanonical' => $this->canonicalizeUsername($username)));
}
于 2015-12-27T07:38:21.900 に答える
0

Ok。いくつかの調整のために PR を開きましたが、機能させることができませんでした。

私が行った微調整は、neo4j_user構成を介してユーザーとパスワードを定義し、DI拡張でservices.ymlファイルをロードする可能性を追加しています。

ユーザーを登録すると、データベースにうまく作成されます。ただし、ユーザーを取得するために、いくつかのデバッグの後、基盤となるクライアント (neo4jphp と neo4j-php-ogm を組み合わせたもの) がレガシー インデックスを使用しており、この段階でいくつかのエラーをスローしていることがわかります。

最初はogmを使用せず、未加工の暗号クエリを試すように指示することを除いて、私はこれ以上助けることはできません.

残念ながら、使用されている両方のライブラリを更新しようとすると、最初は難しい場合があります。

于 2015-07-24T14:37:30.973 に答える