首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Neo4j与FOSUserBundle结合使用?

如何将Neo4j与FOSUserBundle结合使用?
EN

Stack Overflow用户
提问于 2015-07-21 15:38:29
回答 2查看 340关注 0票数 1

我试图调整FOSUserBundle以处理我的Neo4j数据库,但我似乎无法让它正常工作。在尝试实现自己的用户系统(Setting up NEO4j in Symfony2)很长一段时间之后,我开始尝试使用FOSUserBundle

我使用了以下文章和存储库:

https://github.com/ikwattro/Neo4jUserBundle --我拿了这个,把所有的文件复制到我的UserBundle中。我改变了namespaces

我从这里取走了图形管理器:https://github.com/ikwattro/KwattroNeo4jOGMBundle

至于其余部分,我已经了解了FOSUserBundle文档。

现在,当我进入登记表时,所有的字段都会出现,我可以填写我的首选证书。这个很管用。单击submit后,将重定向到“成功”页面,在该页面上显示一个警报覆盖:

加载web调试工具栏时发生错误(500:内部服务器错误)。你想打开分析器吗?

如果然后输入分析器,我可以看到我已经成功地作为我刚刚创建的用户进行了授权和登录。数据也成功地保存在我的neo4j数据库中。

现在的问题是,如果我访问Symfony项目的任何其他页面,我将再次以匿名身份登录。如果我转到登录页面,表单将正确显示,但它总是返回:无效凭据

我猜,我的会议和安全有什么问题吗?

这是我的security.yml:

代码语言:javascript
复制
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下的分析器注册后(当用户仍然经过正确的身份验证时),这是会话信息:

代码语言:javascript
复制
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]

任何帮助或暗示都将不胜感激。

更新21.07.2015

我现在已经创建了一个存储库:https://github.com/JoranBeaufort/Neo4jUserBundle (我希望这是我第一次使用GitHub)

我想会议处理有什么不对吧?

另一件要指出的是,依赖注入似乎什么也不做。我肯定错过了一些重要的事情。

如果能够提供一个Neo4jUserBundle,该FOSUserBundle可以在Symfony项目的配置文件中进行配置,这将是非常棒的。对数据库的身份验证(使用用户名和密码连接到neo4j)也是非常重要的。

更新22.07.2015

我改变了bundlename,我想我终于让DependencyInjection开始工作了。我不太确定,但我想我对如何命名我的班级有一个问题。

我也尝试过你对findUserById的建议。我编写了一个控制器,它采用myapp.com/neo4juser/debug/finduserbyid/{id}路由,然后使用findUserById方法返回用户。这很管用。我的Neo4j-数据库中有一个ID = 68和email=test@test.test的用户。如果我现在输入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中的方法似乎正在返回所需的对象。

这是否有助于弄清楚为什么登录不起任何作用?序列化是否与错误或加密类型有关?或者这是否与中央应急基金有关?还有进一步的暗示吗?

更新23.07.2015

当使用in_memory作为提供程序并设置in_memory用户时,登录可以工作。所以现在我把问题的范围缩小到供应商身上。

我越来越近了!现在,dev.log文件中的错误如下:

代码语言:javascript
复制
[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”测试部分,我猜这意味着用户提供程序中有些东西不起作用。有人能发现问题出在哪里吗?我正在调用的提供者可以在这里找到:https://github.com/JoranBeaufort/Neo4jUserBundle/tree/master/Security

EN

回答 2

Stack Overflow用户

发布于 2015-07-24 14:37:30

好的。我开了一家公关公司,做了一些调整,但我没能让这些东西发挥作用。

我所做的调整增加了通过neo4j_user配置定义用户和密码的可能性,并在DI扩展名中加载services.yml文件。

当我注册一个用户时,它是在数据库中很好地创建的。但是,对于获取用户,经过一些调试后,我可以看到底层客户端(neo4jphp与新4j-php)正在使用遗留索引,并且在现阶段抛出了一些错误。

除了告诉您在开始时不要使用ogm,并尝试使用原始密码查询之外,我无法进一步帮助您。

我担心在第一次尝试更新两个使用的库时可能会很困难。

票数 0
EN

Stack Overflow用户

发布于 2015-12-27 07:38:21

我想说的问题是,在2015年12月27日,第73行的UserManager没有返回找到的用户(是一个空函数)。我已经几天没有试过了,也不能尝试,也许这是一个不再寻求的答案,但我很确定这就是问题所在。

因为@ IDEs标签,IDEs不会发现它有什么问题:

代码语言:javascript
复制
* Finds a user by username
 *
 * @param string $username
 *
 * @return UserInterface
 */
public function findUserByUsername($username)
{
    $this->findUserBy(array('usernameCanonical' => $this->canonicalizeUsername($username)));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31543627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档