【问题标题】:Symfony's annotations ignored by firewallSymfony 的注释被防火墙忽略
【发布时间】:2015-04-14 19:23:06
【问题描述】:

我在 Symfony 2.6.6 中有一个 AccountController.php 文件,可与 annotations 一起使用:

<?php

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;

/**
 * @Route("/login", name="account_login")
 * @Method({"GET", "POST"})
 */
public function loginAction(Request $request) {}

/**
 * @Route("/login_check", name="account_login_check")
 * @Method({"POST"})
 */
public function loginCheckAction() {}

/**
 * @Route("/logout", name="account_logout")
 * @Method({"GET"})
 */
public function logoutAction() {}

/**
 * @Route("/register", name="account_register")
 * @Method({"GET", "POST"})
 */
public function registerAction(Request $request) {}

我在防火墙中的 access_control:

access_control:
    - { path: ^/account/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/account/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/account/logout, roles: IS_AUTHENTICATED }

我尝试在 logoutAction 上使用@Security("has_role('is_authenticated')"),但是当我没有登录时(匿名)它仍然可以让我转到页面。

有没有办法以正确的方式使用@Security 锁定功能?当我使用注解时,是否还需要我的防火墙?

谢谢。

【问题讨论】:

  • symfony2 的哪个版本?
  • 很抱歉我没有提供版本号。我编辑了我的帖子。现在是 2.6.6。
  • 尝试使用 IS_AUTHENTICATED_REMEMBERED 而不是 IS_AUTHENTICATED
  • 只是检查显而易见的 - 你的 access_control^/account/logout 但你的 URL 只说 /logout。您在其他地方的路由中添加了 /account 位,对吗?
  • 糟糕,是的。它在类Account之上,为@Route("/account")

标签: php symfony annotations yaml


【解决方案1】:

这个呢?

- { path: ^/account/logout, roles: IS_AUTHENTICATED_FULLY }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2015-09-09
    • 2015-02-12
    • 1970-01-01
    • 2018-10-31
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多