【问题标题】:FOSUserBundle Do I copy the action code into my own actionsFOSUserBundle 我是否将操作代码复制到我自己的操作中
【发布时间】:2014-04-22 14:03:48
【问题描述】:

我在使用 FOSUserBundle 时遇到了一些问题。我发现缺少文档,并认为如果他们有一个示例应用程序,我可以下载并查看其源代码,这将非常有帮助。

我的登录路径是/Login。我已经覆盖了树枝模板,以便在导航到我的路线时显示登录表单。但是,我必须在我的 LoginAction 中添加一些默认值才能使其正常工作。

我的登录操作:

/**
     * @Route("/Login", name="wx_exchange_login")
     * @Template("WXExchangeBundle:User:login.html.twig")
     * User log up - Open to public
     * Authenticates users to the system
     */
    public function loginAction()
    {
        return array('error' => 0, 'csrf_token' => 'foobar', 'last_username' => 'foobar');
    }

FOSUserBundle LoginAction

我的印象是,由于 FOSUserBundle 已经定义了 Action 代码,所以我的 loginAction 中不需要任何代码。从文档中不清楚我应该在我的行动中做任何事情。我在网上看到了一些示例,显示人们已将相关 FOSUserBundle 操作中的代码复制到他们自己的操作中。

实现 FOSUserBundle 以将其代码复制到您自己的操作中是正确的方法吗?

编辑:我没有覆盖捆绑包。

编辑 2: 我的 routing.yml 与文档略有不同。我的第一个条目是:

wx_exchange:
    resource: "@WXExchangeBundle/Controller/"
    type:     annotation
    prefix:   /

其余条目如文档中所述(导入 FOSUserBundle 路由)。

Security.yml:

# app/config/security.yml
security:
    encoders:
        FOS\UserBundle\Model\UserInterface:
            algorithm: bcrypt
            cost: 15

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                login_path: /Login
            logout:       true
            anonymous:    true

    access_control:
        - { path: ^/Login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/SignUp, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ResetPassword, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/Confirm, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/Dashboard/, role: ROLE_ADMIN }

【问题讨论】:

  • 你确定你读完了这一切吗? github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/… 对我来说似乎很清楚。您使用的是哪个版本的捆绑包? 1.2、1.3 还是最新版本?如果你真的走不出来,我会尽快帮你:)顺便说一句,你的 app/config/security.yml 文件是什么样子的?
  • 我正在使用主版本,并且我已经完成了第一页上的步骤。根据完成这些步骤后的文字,我现在应该可以在app.com/app_dev.php/login 登录,但我发现不是这种情况。
  • 你的 security.yml 文件的内容是什么?如果一切正常,我想看看这个:) 谢谢!
  • @Wcool 刚刚发布。
  • 你得到什么错误?在我的登录表单中,我需要下划线。看我的代码:表单<form action="{{ path("fos_user_security_check") }}" method='post' class='form-validate' id="test">CSRF输入<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />密码<input type="password" id="password" name="_password" required="required">提交btn<input type="submit" name="_submit"

标签: symfony fosuserbundle


【解决方案1】:

我可能终于得到了答案。登录部分的代码确实已经在 FOSUserBundle 中定义了。我查看了自己项目的路由,可以看到是这样的:

fos_user_security_login:
    pattern: /login
    defaults: { _controller: FOSUserBundle:Security:login }

//Check a login:
fos_user_security_check:
    pattern: /login_check
    defaults: { _controller: FOSUserBundle:Security:check }
    methods: [POST]

//The logout route:
fos_user_security_logout:
    pattern: /logout
    defaults: { _controller: FOSUserBundle:Security:logout }

现在,这些路由都指向包含这些方法的包的 SecurityController。此类可以在 /vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Controller/SecurityController.php 中找到,路由可以在 /vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/config/routing/ 中找到security.xml(我在这篇文章中将其转换为 YAML 以便于理解)。

因此,您唯一需要做的就是在 app 文件夹中的路由文件中对这个 security.yml 文件进行引用(导入)。

回答您的问题:我认为您不需要在自己的控制器中定义这些,因为它们已经在上述文件中定义。

如果我能找到更多详细信息,我会尽快发布。有一段时间我使用了这个捆绑包。我现在使用内置的 Symfony2 元素,从长远来看,我发现它更加透明。

编辑:在我自己的包的路由文件中,我有对这些 XML 文件的引用:

// FOSUser files
fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: user/profile

fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: user/register

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: user/resetting

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: user/profile

【讨论】:

  • 嗯,这正是我所拥有的,除了我有workout_exchange_wx_exchange: resource: "@WXExchangeBundle/Controller/" type: annotation prefix: / 我的登录路由在控制器中定义为/** * @Route("/Login", name="wx_exchange_login") * @Template("WXExchangeBundle:User:login.html.twig") * User login - Open to public * Authenticates users to the system */ 的注释如果我删除该路由,我会收到 404 错误。我想知道 FOSUserBundle 是否可以使用带注释的路由。我想我会去 Github 网站问问他们。非常感谢。
  • 路由在随包分发的文件中,你不需要为登录/注销/注册等编写自己的操作。这就是我试图做的一点:) 很高兴它有帮助你有点
  • 我没有仔细阅读您的评论。我认为该捆绑包确实不支持您希望的注释路由:) 祝你好运!
  • 好的,感谢您付出的所有努力。我暂时放弃了 FOSUserBundle,并设法使用 Symfony 文档进行登录/注册。
猜你喜欢
  • 1970-01-01
  • 2018-10-24
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多