2015-07-21 108 views
1

我想調整FOSUserBundle與我的Neo4j數據庫一起工作,我似乎無法使它工作。經過很長時間的努力實現我自己的用戶系統沒有運氣(Setting up NEO4j in Symfony2),我開始嘗試使用FOSUserBundle。與Symfony2中的FOSUserBundle一起使用Neo4j

我用下面的文章和資料庫:

https://github.com/ikwattro/Neo4jUserBundle 我採取這種和複製所有文件到我UserBundle。我改變了命名空間。

我已經採取了圖表管理器從這裏:https://github.com/ikwattro/KwattroNeo4jOGMBundle

至於其他,我都跟着FOSUserBundle文檔。

現在,當我去註冊表單時,所有字段都會出現,我可以填寫我的首選憑證。這工作。我點擊提交後我重定向到成功頁面,其上顯示警報覆蓋:

An error occurred while loading the web debug toolbar (500: Internal Server Error). 

Do you want to open the profiler? 

如果我再進入探查,我可以看到,我已成功授權並登錄的用戶我剛剛創建的。數據也成功保存在我的neo4j數據庫中。

現在的問題是,如果我去我的Symfony項目的任何其他頁面,我再次登錄爲匿名。如果我進入登錄頁面,表單顯示正確,但它總是說:Invalid credentials.

我在猜測,他們在我的會話或我的安全性方面有問題嗎?

這是我security.yml:

安全: 編碼器: FOS \ UserBundle \型號\的UserInterface:bcrypt Neo4jUserBundle \實體\用戶: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 } 

我不知道這是否信息可以幫助或者是相關的,但是在註冊後的「請求」下的分析器中(當用戶仍然正確認證時),這是會話信息:

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] 

任何幫助或暗示將不勝感激。

UPDATE [2015年7月21日]

我現在已經創建了一個庫:https://github.com/JoranBeaufort/Neo4jUserBundle(我希望這個作品,我已經使用GitHub的第一次)

我的猜測是,他們是事關與會話處理?

要指出的另一件事是,依賴注入似乎並沒有做任何事情。我一定會錯過幾件重要的事情。

這裏是我的日誌文件中的相關部分: 由於刪除大小

這將是馬麗娟能夠提供Neo4jUserBundle其開箱與FOSUserBundle,可以在配置symfony項目的配置文件。偉大而重要的還將是對數據庫的認證(使用用戶名和密碼連接到neo4j)。

UPDATE [2015年7月22日]

我已經改變了軟件包名稱,我想我終於得到了DependencyInjection工作。我不太確定,但我認爲我對我的類命名有問題。

我也試過你用findUserById建議的。我寫了一個控制器,它採用路由myapp.com/neo4juser/debug/finduserbyid/{id},然後使用findUserById方法返回用戶。這是行得通的。我的Neo4j-Database中有一位用戶,ID = 68,email = [email protected]。如果我現在輸入myapp.com/neo4juser/debug/finduserbyid/68,則會加載該頁面,顯示該用戶的正確電子郵件。

嫩枝可以在這裏找到:https://github.com/JoranBeaufort/Neo4jUserBundle/blob/master/Resources/views/Debug/finduserbyid.html.twig

這裏控制器:https://github.com/JoranBeaufort/Neo4jUserBundle/blob/master/Controller/DebugController.php

中的UserManager的方法似乎returnung所需的對象。

這是否有助於弄清爲什麼登錄無法以任何方式工作?序列化與錯誤或加密類型有關嗎?或者它可能與csrf有關?還有什麼提示?

UPDATE [2015年7月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\" does not exist。我猜這意味着,自己是不是在用戶供應商合作。任何人都可以發現問題可能是什麼?我打電話的提供商可以在這裏找到:https://github.com/JoranBeaufort/Neo4jUserBundle/tree/master/Security

+0

你有一個儲存庫,代碼可用,可能有這麼多的東西在這裏打球。你也可以發佈日誌文件的內容。 thx –

+0

我現在已經添加了一個存儲庫和日誌文件的最新內容。親切的問候 – Joran

+0

謝謝,並感謝在課堂上提及我的名字。真的很難這樣說。日誌也不是很有用。你是否檢查過UserManager中的方法是否返回任何內容,只需打印返回的findUserById或findUserByUsername,例如 –

回答

0

好的。我打開了一些PR的一些調整,但我無法得到的東西工作。

我所做的調整增加了通過neo4j_user配置定義用戶和密碼的可能性,並在DI擴展中加載了services.yml文件。

當我註冊一個用戶時,它很好地創建在數據庫中。然而,對於獲取用戶,經過一些調試後,我可以看到底層客戶端(neo4jphp與neo4j-php-ogm結合)正在使用舊版索引,並且在此階段引發了一些錯誤。

除了告訴你不要試着在開始時使用ogm並嘗試使用原始密碼查詢,我無法進一步提供幫助。

恐怕試圖更新這兩個庫在第一個實例中可能很困難。

+0

謝謝您的關注。我發現的是,usermanager中的findUserById()函數返回所需的用戶對象。當告訴登錄表單使用ID而不是用戶名時,會拋出以下錯誤:「Warning:Class __PHP_Incomplete_Class no no unserializer」這意味着用戶被發現,但是還有其他問題出錯。好的,我會看看我是否能夠創建原始密碼查詢來獲取我想要的內容。謝謝,如果您碰巧有其他想法,請隨時與我聯繫。親切的問候 – Joran

+0

也許我們可以與Skype聯繫,只需要給我發一封電子郵件:christophe(at)graphaware(dot)com –

+0

我已經開始了一個新的嘗試,但似乎卡住了你提到的相同的地方(已調試到錯誤:「[message] => org.apache.lucene.queryParser.ParseException:Can not parse'emailCanonical:':Encountered」「at line 1,15。」)。我想問你是否可以闡明我應該如何使用原始密碼查詢將FOSUserBundle連接到我的數據庫?使用https://github.com/graphaware/neo4j-php-client我可以構建一個控制器來向數據庫發送查詢,但是我如何將它集成到FOSUserBundle中? – Joran

0

我想說的是,截至2015年12月27日,問題是UserManager在第73行沒有返回找到的用戶(是一個void函數)。我還沒有嘗試過,也沒有幾天,也許這是一個沒有找到答案,但我很確定這是問題所在。

由於@return標籤的IDE不需額外覺得這是一個問題:

* Finds a user by username 
* 
* @param string $username 
* 
* @return UserInterface 
*/ 
public function findUserByUsername($username) 
{ 
    $this->findUserBy(array('usernameCanonical' => $this->canonicalizeUsername($username))); 
} 
+0

請原諒遲到的答案。謝謝您的意見。由於時間原因,我現在決定現在使用FOSUserBundle使用Doctrine來使用正常的MySQL。我希望FOSUserBundle能夠連接到Neo4j數據庫,因爲圖形數據庫似乎越來越重要。但我現在沒有時間創造一些東西。如果有人遇到一個新的捆綁包,編號很高興知道。親切的問候 – Joran

相關問題