【发布时间】: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