0

ユーザーが/admin/内にアクセスすることを制限しようとしています。ユーザーがアクセスしようとすると、/loginにリダイレクトされます。

現時点では、従来のログインフォームを使用しているログインページにアクセスできます。送信すると、「不正な資格情報」というエラーが返されるため、/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
4

2 に答える 2

1

/ admin/XXXルートは不要です。設定した場合

pattern:    ^/admin

/ admin/XXXは/loginにリダイレクトする必要があります。詳細については、http://symfony.com/doc/2.0/book/security.html#using-a-traditional-login-formを参照してください。

于 2013-01-10T14:57:28.870 に答える
1

アクセスしようとしている両方のルートが欠落しているようです。これをrouting.ymlに追加してみてください:

admin:
    resource: "@XXXBundle/Controller/Admin.php"
    type:     annotation
    prefix:   /admin

アノテーションを使用したルートがとても好きなので、この例ではそれを使用しました。

次に、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
    }
}
于 2013-01-10T15:01:48.280 に答える