簡體   English   中英

登錄表單不起作用,在Symfony2中提交后再次加載

[英]Login form does not work, keeps loading again after submitting in Symfony2

我正在Symfony2中創建一個博客應用程序,我想創建一個登錄表單。 到目前為止我做了什么:

  1. 將我的用戶實體與安全性連接起來
  2. 做了一個表格
  3. 配置的路由和security.yml。

它只是不想工作。 當我嘗試提交用戶名和密碼時,我得到的只是一個登錄表單。 我認為這是路線的問題,但我無法弄明白。 誰能指出我在哪里有任何錯誤?

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>

為什么在已經有捆綁的情況下重新發明輪子。 查看FOSUserBundle。 它是一個很棒的捆綁包,提供靈活的安全框架,允許您從配置或數據庫加載用戶。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html希望它有所幫助!

好吧,所以我似乎找到了解決方案。 你看,當你在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM