【发布时间】:2016-03-16 19:36:22
【问题描述】:
我是 Symfony2 和 FOSUserBundle 的新手。我了解捆绑包是什么以及将其用于什么用途,但我对如何使用捆绑包与我已经到位的视图和控制器相关联有疑问。
我已经设置了捆绑包并使其正常工作,但我对下一个任务感到困惑。
设置:在 FOSUserBundle 的登录页面上,我希望将“管理员用户”路由到某个页面,而将“普通用户”路由到另一个页面。我在哪里放置这个逻辑?我目前在我的捆绑包的 DefaultController 中有它,但获取页面:localhost isn't working...localhost redirected you too many times... 我清除了缓存,但结果仍然相同。
默认控制器:
namespace Pas\ShopTestBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class DefaultController extends Controller
{
/**
* @Route("/")
* @Template()
*/
public function indexAction(Request $request) {
if ('admin_login' === $request->get('_route')) {
return $this->redirectToRoute('product'); //just test to product
} else {
return $this->redirectToRoute('login'); //just test to login
}
}
}
现在我的终极目标是,一旦用户登录,他们的用户名就会显示在他们被发送到的页面上。我该如何编码?去哪儿了?
非常感谢您的帮助,谢谢大家。
Symfony 2.7:FOSUserBundle 2.0
编辑:security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_ADMIN
ROLE_NORMAL: ROLE_NORMAL
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
fos_userbundle:
id: fos_user.user_provider.username
in_memory:
memory: ~
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
login_path: login
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
# - { path: ^/admin_login, role: ROLE_ADMIN }
【问题讨论】:
-
什么是普通用户?它是经过身份验证的用户还是只是一个匿名用户?什么是'admin_login'?为什么要在
default/index中测试“admin_login”路由?你能给我们提供security.yml,特别是关于访问控制的吗?我认为您的重定向发生是因为您已经登录,因此该应用程序将您重定向到default/index并且您的条件从未满足('admin_login' != _route),因此它将其重定向回登录。这会永远循环下去,最终会给你带来太多的重定向。 -
我使用 security.yml 进行了编辑。普通用户是经过身份验证的匿名用户。我也明白你的意思...我还应该在哪里/应该测试 admin_login?
标签: php symfony fosuserbundle