【发布时间】:2016-06-17 07:22:20
【问题描述】:
我在 symfony 3 中遇到了防火墙问题。从 3 天开始,我一直在努力解决这个问题。我已经阅读了文档并按照它做了所有事情,但是应用程序并没有像我预期的那样工作。
目标:所有页面(登录页面除外)都需要登录用户。如果用户没有登录,他应该被重定向到 /login 页面。就是这样。
根据本页:
- http://symfony.com/doc/current/book/security.html
- http://symfony.com/doc/current/cookbook/security/form_login_setup.html
我创建了带有登录操作和表单的控制器。 login_path 和 check_path 使用相同的操作(根据文档)。可能 security.yml 中的某些内容是错误的,因为它无法正常工作。我的设置:
security:
providers:
in_memory:
memory:
users:
aaa:
password: aaa
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/login
anonymous: ~
# form_login:
# login_path: /login
# check_path: /login
secured_area:
pattern: ^/
form_login:
login_path: /login
check_path: /login
default_target_path: homepage
logout:
path: /logout
target: /login
# access_control:
# - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# - { path: ^/, roles: IS_AUTHENTICATED_FULLY }
我的登录操作:
<?php
/**
* @Route("/login", name="login")
*/
public function loginAction(Request $request)
{
$authenticationUtils = $this->get('security.authentication_utils');
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render(
'security/login.html.twig',
array(
// last username entered by the user
'last_username' => $lastUsername,
'error' => $error,
)
);
}
?>
问题:
- 使用此配置,我无法登录。请求使用登录操作,但系统不想对我进行身份验证。
- 如果我在 login_firewall 防火墙中取消注释 form_login,身份验证工作正常(我已登录),但我无法访问主页(系统将我重定向到登录页面,尽管我已通过身份验证。
- 我尝试使用 access_control,但行为与第 2 点相同。
请帮帮我。我确信这很简单,但我是 Symfony 的新手,我看不到它。
更新
感谢 Tobias Xy,我更正了 security.yml。工作版本:
security:
providers:
in_memory:
memory:
users:
smt:
password: smt
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
form_login:
login_path: /login
check_path: /login
default_target_path: /
logout:
path: /logout
target: /login
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
【问题讨论】: