【发布时间】:2013-07-27 21:01:05
【问题描述】:
我想关闭我的整个网站,只允许经过身份验证的用户访问,但我想保留一些公开的路线。公共路线是:
/
/新闻
/注册
所有其他人都被锁定。 我做了一个看起来像这样的防火墙:
firewalls:
user_login:
pattern: ^/
anonymous: ~
user_area:
pattern: ^/
form_login:
login_path: _main_index #this is a route to /
logout:
path: _main_logout #this is a route to /logout
target: _main_index #this is a route to /
invalidate_session: false
access_control:
- { path: ^/news, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user-panel, roles: ROLE_ACTIVE_USER } #is this neccessary?
然后,当我登录到受限区域(/用户面板)时,我需要对自己进行完全身份验证。
我将我的角色存储在 security.yml 中,而不是在数据库中。
我希望你能帮助我!非常感谢!
编辑: 我的 loginCheckAction 看起来像这样::
$encodedPassword = $this->get('user.user_service')->generatePasswordHash($user, $request->request->get('_password'));
if ($user->getPassword() == $encodedPassword) {
$user->setLastLoginOn(new \DateTime());
$this->em->user($rocker);
$this->em->flush();
$token = new UsernamePasswordToken($user, $user->getPassword(), 'user_area', array($user->getRoles()));
$request->getSession()->set('_security_user_area', serialize($token));
return $this->redirect($this->generateUrl('_user_panel'));
}
【问题讨论】:
-
为什么两个防火墙具有相同的模式?这行不通
-
我不知道这到底是如何工作的,但如果我删除 user_login 部分,网站甚至不会调用 loginCheckAction...
-
我有这个。 user_login 需要自动登录(否则需要实现UserProviderInterface)。 user_area 实际上是关闭站点的防火墙。
标签: security authentication symfony login roles