我正在尝试限制用户访问/ admin /中的任何内容,如果他们尝试将其重定向到/ login。
目前我可以访问使用传统登录表单的登录页面,如果我提交它,我会收到一条错误,返回“Bad Credentials”,因此/ login_check似乎正常工作。但是,如果我转到/ admin /或/ admin / foo,它不会重定向到/ login。相反,它说'找不到GET / admin /的路线'。
我的security.yml文件是:
jms_security_extra: secure_all_services:false 表达式:true
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN:
ROLE_SUPER_ADMIN:
providers:
administrators:
entity: { class: XXXBundle:AdminUser, property: email }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_area:
pattern: ^/admin
form_login:
login_path: /login
check_path: /admin/login_check
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
我的routing.yml文件是:
login:
pattern: /login
defaults: { _controller: XXXBundleSecurity:login }
login_check:
pattern: /admin/login_check
答案 0 :(得分:1)
/ admin / XXX路由是不必要的。如果你已经设置
pattern: ^/admin
应将/ admin / XXX重定向到/ login。 更多详情请参阅http://symfony.com/doc/2.0/book/security.html#using-a-traditional-login-form
答案 1 :(得分:1)
您似乎错过了尝试访问的两条路线。尝试将此添加到routing.yml:
admin:
resource: "@XXXBundle/Controller/Admin.php"
type: annotation
prefix: /admin
我非常喜欢Routes using Annotations,所以我在这个例子中使用了它。
然后在你的Admin.php中你可以使用类似的东西:
// XXXBundle/Controller/Admin.php
namespace XXXBundle/Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
class AdminController extends Controller
{
/**
* @Route("/", name="admin_index")
*/
public function indexAction(Request $request)
{
// Code goes here
}
/**
* @Route("/foo ", name="admin_foo")
*/
public function fooAction(Request $request)
{
// Code goes here
}
}