Php 无法使用Symfony 3.1中的登录表单登录
我一直在按照symfony网站()上的教程为我的symfony 3.1项目添加登录名。它可以与HTTP基本身份验证一起工作,但是当我使用教程here()添加form_登录时,它会一直重定向到登录页面而不登录 这是我的保安。yml:Php 无法使用Symfony 3.1中的登录表单登录,php,login,symfony,Php,Login,Symfony,我一直在按照symfony网站()上的教程为我的symfony 3.1项目添加登录名。它可以与HTTP基本身份验证一起工作,但是当我使用教程here()添加form_登录时,它会一直重定向到登录页面而不登录 这是我的保安。yml: security: providers: in_memory: memory: users: ryan: password: ryanpass
security:
providers:
in_memory:
memory:
users:
ryan:
password: ryanpass
roles: 'ROLE_USER'
admin:
password: kitten
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
login_firewall:
anonymous: ~
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
provider: in_memory
form_login:
login_path: /login
check_path: /login_check
logout: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
保安主任:
class SecurityController extends Controller
{
/**
* @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,
)
);
}
/**
* @Route("/login_check", name="login_check")
*/
public function loginCheckAction(Request $request) {
;
}
login.html.twig:
{% extends 'base.html.twig' %}
{% block body %}
<div id="login_form">
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('login') }}" method="post">
<p><label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" /></p>
<p><label for="password">Password:</label>
<input type="password" id="password" name="_password" /></p>
{#
If you want to control the URL the user
is redirected to on success (more details below)
<input type="hidden" name="_target_path" value="/account" />
#}
<p><button type="submit">login</button></p>
</form>
</div>
{% endblock %}
{%extends'base.html.twig%}
{%block body%}
{%if错误%}
{{error.messageKey | trans(error.messageData,'security')}
{%endif%}
用户名:
密码:
{#
如果要控制用户的URL
成功时重定向到(更多详细信息如下)
#}
登录
{%endblock%}
多亏了@Cerad,我将我的编码器部分放在我的提供者之上,并删除了登录的防火墙
安全现在是:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
providers:
in_memory:
memory:
users:
ryan:
password: ryanpass
roles: 'ROLE_USER'
admin:
password: kitten
roles: 'ROLE_ADMIN'
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
form_login:
login_path: /login
check_path: /login_check
logout: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
登录页面通过访问控制列表而不是防火墙规则是匿名的教程的流程可能不如它应该的那样流畅。你的防火墙定义搞砸了。看这里:是的,它们看起来确实有点过于复杂和凌乱。看起来像是将编码器放在提供者之上,并删除防火墙部分中的anon for/login