我在Symfony中构建了一个登录系统。在受保护的每个页面上我需要验证用户名是否与密码匹配。我在 myUser.class.php 中写了一个函数:isValidAuth()
。不过,我需要在每个页面的操作中写下这些行:
if(!isValidAuth())
{
$this->forward('home', 'logout');
}
当您有多个受保护的页面和模块时非常不方便。如果页面is_secured
,我有没有办法像函数一样运行这些行?就像在页面加载时访问executeIndex()
一样?
答案 0 :(得分:1)
Symfony中有一个内置功能可以处理这个问题。 manaual适用于1.2版,但它也适用于版本1.4:http://www.symfony-project.org/book/1_2/06-Inside-the-Controller-Layer。
由于1.4中的配置值已更改为true / false而非on / off,因此您必须更改它们:http://www.symfony-project.org/reference/1_4/en/08-Security
应用/前端/模块/ MyModule的/配置/ security.yml
all:
is_secure: true # for all actions of a module
foo:
is_secure: false # action foo is public
在apps / frontend / config / settings.yml中,您必须提供一个模块和操作来执行登录等。
all:
.actions:
login_module: default
login_action: login
secure_module: default
secure_action: secure
最后但并非最不重要的是,您需要在用户上设置认证标志(通常在登录后;)):
$this->getUser()->setAuthenticated(true);
顺便说一下。也许你应该安装sfdoctrineguardplugin,提供开箱即用的用户处理,登录等;)
答案 1 :(得分:0)
最好的地方是过滤链,我甚至建议扩展sfBasicSecurityFilter。要启用扩展类,请编辑apps / myapp / config / filters.yml
rendering: ~
security:
class: myExtendedSecurityFilter
# Generally, you will want to insert your own filters here
cache: ~
execution: ~
您还可以创建一个扩展sfFilter的新类,而不是扩展sfBasicSecurityFilter。在此处阅读有关过滤器的更多信息: