创建用户后无法为“page_slug”生成 URL

Posted

技术标签:

【中文标题】创建用户后无法为“page_slug”生成 URL【英文标题】:Unable to generate a URL for "page_slug", after creating a user 【发布时间】:2013-10-21 14:59:29 【问题描述】:

我有一个奇怪的问题。我安装并配置了 SonataUserBundle 以使用 FosUserBundle 和 SonataAdminBundle。安装没有任何问题,一切似乎都运行良好,除非我通过 sonataUserBundle 网页创建另一个用户。一旦我创建了用户(并且它是在我查看数据库时创建的),我就再也看不到用户列表了。当我点击返回用户列表时,出现以下错误:

An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "page_slug" as such route does not exist.") in "SonataAdminBundle:CRUD:list.html.twig".

如果我从数据库中删除用户,只有一个用户,那么我可以访问用户列表。

我完全不知道如何进一步解决这个问题......

编辑 1:

感谢 Marko Jurinčič,我发现我的配置中有这些行

sonata_user:

    impersonating:
        route:                page_slug
        parameters:            path: / 

但是,这看起来不像是一条路线,而且实际上没有任何名为 page_slug 的路线。它应该有一个路由名称“page_slug”吗?

【问题讨论】:

您是否使用新用户登录?权限呢? 不,我的意思是当我在管理页面(使用我的管理员用户)中创建用户时,我无法再访问用户列表了。 【参考方案1】:

我也有同样的问题。我所做的是在我的项目中搜索page_slug,我发现在我的sonata_user下的config.yml中使用了page_slug

impersonating:
  route: page_slug
  parameters:  path: /   

我仍然需要看看这是否会影响其他东西(我是 Symfony 的新手,所以我不能 100% 确定这不会在其他地方使用 :))

评论(或只是删除)这解决了我的问题,现在我可以在管理仪表板中看到用户列表。

希望对你有帮助。

编辑: 我找到了答案。在此链接中解释了模拟的含义: https://github.com/sonata-project/SonataUserBundle/issues/174

【讨论】:

感谢您的更新。但是,它已经没有评论了。我的配置中有这个:模拟:路由:page_slug参数:路径:/但它仍然说我没有路由名称page_slug。 我的错,你必须评论或删除它。【参考方案2】:

我在一个网站上看到了一个方法 (http://www.laurent-masforne.com/memo/surcharger-sonatauserbundle-notamment-useradmin/) 并评论了这些行:

/*if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) 
            $listMapper
                ->add('impersonating', 'string', array('template' => 'SonataUserBundle:Admin:Field/impersonating.html.twig'))
            ;
        */

vendor\sonata-project\user-bundle\Sonata\UserBundle\Admin\Model\ApplicationUserAdmin

解决了这个问题。但是,我不知道这样做的影响......

【讨论】:

【参考方案3】:

删除损坏的配置

如果你不使用模拟,你应该从配置中删除行:

impersonating:
  route:                page_slug
  parameters:            path: / 

配置模拟

(愿谷歌流浪者能找到)

否则需要配置模拟: 1.用户需要有ROLE_ALLOWED_TO_SWITCH角色。我将管理员配置为具有此角色:

# app/config/security.yml  
security:  
  role_hierarchy:  
    ROLE_ADMIN:  [ROLE_USER, ROLE_ALLOWED_TO_SWITCH]

2。允许用户在防火墙中切换:

# app/config/security.yml      
firewalls:
  main:
    switch_user: true

3。 (如果你想要 Sonata Admin 用户列表中的链接)设置 SonataUserBundle - 将my_home_route 替换为单击链接切换用户后要打开的路由名称:

# app/config/config.yml
sonata_user:
  impersonating:
    route:  my_home_route

手动用户切换

手动切换用户添加字符串到 url 结尾:?_switch_user=username。将username 更改为真实用户名。

【讨论】:

这太有趣了!如果我做对了,模仿意味着扮演另一个角色。因此,我假设 ROLE_ADMIN 可能会冒充 ROLE_USER,因为 ROLE_USER 的权限比 ROLE_ADMIN 少,但这不会反过来吗? 冒充意味着充当另一个用户。您将从您模拟的用户那里获得所有权限。 我的意思是希望权限较低的用户 (ROLE_USER) 不能冒充具有较高权限的用户 (ROLE_ADMIN) 其实ROLE_USER可以冒充ROLE_ADMIN。刚试了一下。将 ROLE_ALLOWED_TO_SWITCH 添加到 ROLE_USER,以非特权用户登录,模拟管理员,获得所有特权,甚至删除了我最初登录时使用的同一用户:D

以上是关于创建用户后无法为“page_slug”生成 URL的主要内容,如果未能解决你的问题,请参考以下文章

为两个类似的数据库创建不同的Session

无法为连接 URL 创建类的 JDBC 驱动程序 null

无法为命名路由“克隆”生成 URL

如何在 NextJS+React 中使用 api 生成的内容创建用户可自定义的动态 url?

成功创建超级用户后无法登录 Heroku 管理面板

为“apache”用户生成 SSH 密钥