2015-07-21 102 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

相关问题