Symfony2登录验证

时间:2013-01-10 13:37:08

标签: authentication symfony login doctrine

我正在尝试限制用户访问/ 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

2 个答案:

答案 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
    }
}