我正在Symfony2中创建一个博客应用程序,我想创建一个登录表单。 到目前为止我做了什么:
它只是不想工作。当我尝试提交用户名和密码时,我得到的只是一个登录表单。我认为路线有问题,但我无法解决这个问题。谁能指出我在哪里有错误?
SecurityController:
<?php
namespace BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends Controller
{
/**
* @Route("login", name="login")
*/
public function loginAction()
{
$authUtil = $this->get('security.authentication_utils');
// error content
$error = $authUtil->getLastAuthenticationError();
// username entered by the user
$lastUsername = $authUtil->getLastUsername();
return $this->render('BlogBundle:Default:login.html.twig', array(
'error' => $error,
'last_username' => $lastUsername)
);
}
}
security.yml:
security:
providers:
db_provider:
entity:
class: BlogBundle:Users
property: username
firewalls:
main:
anonymous: ~
form_login:
provider: db_provider
login_path: login
check_path: login
登录表单:
<form role="form" action="{{ path('login') }}" method="post">
<div class="form-group">
<input class="form-control" id="username" placeholder="Username" name="_username" type="text" autofocus>
</div>
<div class="form-group">
<input class="form-control" id="password" placeholder="Password" name="_password" type="password" value="">
</div>
<button type="submit" class="btn btn-lg btn-success btn-block">Login</button>
答案 0 :(得分:2)
你应该在登录页面安全配置中放松一下: http://symfony.com/doc/current/cookbook/security/form_login_setup.html#be-sure-the-login-page-isn-t-secure-redirect-loop
答案 1 :(得分:1)
为什么在已经有捆绑的情况下重新发明轮子。查看FOSUserBundle。它是一个很棒的捆绑包,提供灵活的安全框架,允许您从配置或数据库加载用户。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html 希望它有所帮助!
答案 2 :(得分:1)
好吧,所以我似乎找到了解决方案。 你看,当你在Symfony 2中阅读制作表单的教程时,它会告诉你为login_path和check_path创建相同的路径。 http://symfony.com/doc/2.8/cookbook/security/form_login_setup.html
我没有意识到这条路线与SecurityController中的loginAction相关联,因此每当我尝试提交表单时,它都会返回到loginAction,我在那里渲染登录页面。
解决方案是在SecurityController中创建另一个方法:
/**
* @Route("login_check", name="login_check")
*/
public function loginCheck(){
}
我把它留空了,但如果你愿意,你可以放一些异常处理程序,如:
throw new \Exception("Oops")
当然,我将security.yml中的post post action和check_path更改为 login_check