我想登录主页而不是单独的网站。当我在/ login路由中输入我的凭据时,一切正常,但它在/ route上不起作用。
我在base.html.twig中使用此命令渲染登录表单(出于测试目的,我想在每个页面上呈现登录表单):
{{ render(controller("AppBundle:Security:login")) }}
这是我的login.html.twig:
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('login') }}" method="post">
<div class="form-group">
<input type="text" class="form-control" id="username" placeholder="Email" name="_username" value="{{ last_username }}" />
<input type="password" class="form-control" id="password" placeholder="Heslo" name="_password" />
</div>
<button type="submit" class="btn btn-success">Přihlásit</button>
<a href="/registration" class="btn btn-info" role="button">Registrovat</a>
</form>
我的loginAction:
/**
* @return array
* @Route("/login", name="login")
* @Template()
*/
public function loginAction()
{
$authenticationUtils = $this->get('security.authentication_utils');
// get error
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return [
'last_username' => $lastUsername,
'error' => $error
];
}
在security.yml中的secured_area:
secured_area:
pattern: ^/
anonymous: ~
provider: main
form_login:
login_path: login
check_path: login
logout:
path: /logout
target: /
登录表单在主页上成功呈现。但是当我输入凭据并单击按钮时,没有任何反应。也许是因为按钮试图找到为主页定义的动作形式而不是为登录页面定义的动作?
是否可以选择&#34;强制&#34;改为使用原始(登录)动作的按钮?
感谢您的回答。
答案 0 :(得分:1)
您应该将登录表单发布到check_path
中配置的security.yml
,而不是显示登录表单的控制器。
这个URL(完全由安全扩展程序拦截)将对用户进行身份验证,如果发生错误,则会将用户重定向回登录操作。
有关如何设置基于表单的登录的详细说明,请查看文档中的专用cookbook文章:http://symfony.com/doc/current/cookbook/security/form_login_setup.html