[英]Display authenticated users on non-secure (anonymous) routes
我使用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();
要獲得經過身份驗證的實際用戶並顯示類似$ username的身份登錄 ,但是如果我在/login
或/
路由上執行此操作,則該用戶將永遠是anon.
即使我已通過身份驗證。
如果有一個身份驗證的用戶,我該如何獲取身份驗證的用戶;否則,該如何獲取身份驗證的用戶anon.
字符串,在/
和/login
路由上以顯示如下消息: 以$ username身份登錄 ?
我還嘗試在樹枝模板中使用is_granted('IS_AUTHENTICATED_FULLY'
函數來檢查用戶是否已通過身份驗證,但是在/login
和/
它會返回false(即使我已通過身份驗證),因為匿名用戶的身份優先於已通過身份驗證的用戶,所以這里沒有成功。
為了幫助其他人,我如下所述解決了該問題。 Silex的不使用access_control
,但access_rules
(該死的)。
正如Pazi (+1)所建議的,我將所有內容組合在一個防火牆下並使用了access_rules
:
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'main' => array(
'remember_me' => array(
'key' => $config['secret_key'],
'lifetime' => $config['remember_me_duration'],
),
'pattern' => '^/',
'anonymous' => true,
'form' => array(
'login_path' => '/login',
'check_path' => '/admin/login_check',
),
'logout' => array('logout_path' => '/admin/logout'),
'users' => $app->share(function () use ($app) {
// ...
}),
),
),
'security.access_rules' => array(array('^/admin/files', 'ROLE_ADMIN'),
),
));
一切都必須在同一防火牆下,並且您必須使用訪問控制。
@Paul我希望添加評論,但我還不能添加評論,因此,答案是:
好像拿出來
'pattern' => '^/admin'
您已打開對/ admin / login_check的匿名訪問的防火牆模式中的字符串,這是不對的。
我的建議是取回並移除
'anonymous' => 'true'
從防火牆開始。 應該可以一樣工作,但是會更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.