1

PHP と Silex を使用して Web アプリを構築し、次のSecurityServiceProviderように基本認証を実装しました。

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'private' => array(
            'remember_me' => array(
                'key' => $config['secret_key'],
                'lifetime' => $config['remember_me_duration'],
            ),
            'pattern' => '^/admin',
            'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
            'logout' => array('logout_path' => '/admin/logout'),
            'users' => $app->share(function () use ($app) {
                // ...
            }),
        ),
        'public' => array(
            'pattern' => '^/$',
            'anonymous' => true,
        ),
        'login' => array(
            'pattern' => '^/login$',
            'anonymous' => true,
        ),
    ),
));

/adminパスが保護されていることがわかるよう$app['security']->getToken()->getUser();に、認証された実際のユーザーを取得し、Logged in as $username/loginのようなものを表示するために使用できますが、またはルートでこれを行う/と、ユーザーは常にanon.認証済み。

次のようなメッセージを表示するためにanon.、認証され/ユーザーを取得するにはどうすればよいですか?/login

is_granted('IS_AUTHENTICATED_FULLY'また、小枝テンプレートで関数を使用してユーザーが認証されているかどうかを確認しようとしましたが、匿名ユーザーが認証されたユーザーよりも優先されるため、(認証されていても) false が返されるため、ここでは成功しません/login/

4

3 に答える 3

0

@Paulコメントを追加したいのですが、まだできないので、答えとして:

テイクアウトみたいです

'pattern' => '^/admin'

/admin/login_check への匿名アクセスを開いたファイアウォール パターンからの文字列、これは正しくありません。

私の提案は、それを取り戻して削除することです

'anonymous' => 'true'

ファイアウォールからのライン。同じように動作するはずですが、より安全になります。

于 2014-01-27T01:31:11.673 に答える