2

すべてのマニュアルのすべての構成を試しましたが、まだ機能しません! 誰かがエラーを見つけるのを手伝ってくれますか? これが私のコードです:

Security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    in_memory:
        users:
            user:  { password: userpass, roles: [ 'ROLE_USER' ] }
            admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

firewalls:
    main:
        pattern: ^/
        provider: in_memory
        anonymous: true
        security: true
        form_login:
            login_path: default_login
            check_path: default_check
        logout:
            path: default_logout
            target: default_index
        remember_me:
            key: %secret%
            lifetime: 3600
            domain: ~
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    #- { path: ^/afiliados, roles: ROLE_SUPER_ADMIN}
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

DefaultController.php

namespace Epika\ClubBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;

/**
 * Default controller.
 *
 */
class DefaultController extends Controller
{


    /**
     * @Route("/login", name="default_login")
     * @Template()
     */
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        }

        return array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error
        );
    }

    /**
     * @Route("/login_check", name="default_check")
     * 
     */
    public function loginCheckAction()
    {
        //Security Layer
    }

    /**
     * @Route("/logout", name="default_logout")
     */
    public function logoutAction()
    {
        //Security Layer
    }

}

私の形で私は持っています

<form name="loginForm" action="{{ path('default_check') }}" method="POST" enctype="text/plain">
<input type="text" name="_username" placeholder="Nombre de Usuario" />
<input type="password" name="_password" placeholder="Tú Contraseña" />
<input type="checkbox" name="_remember_me" />
<input type="hidden" name="_target_path" value="/index" />
<a href="javascript:submit()"><img src="{{ asset('bundles/epikaclub/images/entrar.png') }}" /></a>
<script type="text/javascript">
function submit()
{
    document.loginForm.submit();
}
</script>

OK みんな、助けてくれてどうもありがとう。問題は、ログイン フォームの enctype が

<form name="loginForm" action="{{ path('login_check') }}" method="post" enctype="text/plain">

これにより、リクエストが空になりました:S申し訳ありませんが、設定したら

<form name="loginForm" action="{{ path('login_check') }}" method="post" enctype="application/x-www-form-urlencoded">

うまくいきました。今度はDoctrine Entity Providerでチェックして、どうなるか見てみましょう:D

4

3 に答える 3

3

私はあなたがする必要があると信じています:

  • 実際のURLを使用してください(他の人がここで言ったように、つまり「/ login_check」)
  • login_check ルートのコントローラーを作成しないでください。ルート自体は必要ないと思います。Symfony2 は '/login_check' のリクエストを見て、自動的にインターセプトします。

ここのサイドノートの 1 つで説明されています: http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

「資格情報が正しくありません」というエラーは、正しい情報を入力した場合でも、どこかで何らかのエラーが発生していることを示しています。上記の内容でまだ動作しない場合は、エラー ログを確認し、お知らせください。

于 2012-04-14T08:54:41.817 に答える
0

次のように、login_path と check_path の値を実際の URL パスに調整する必要がある場合があります。

firewalls:
    [...]
    main:
        [...]
        form_login:
            login_path: /login
            check_path: /login_check

サム

于 2012-04-13T03:16:13.230 に答える
0

他のオプションとは異なり、check_pathルート名をサポートしていません。のようなパスに設定します/login_check

于 2012-04-13T03:31:56.193 に答える