1

symfony の公式ドキュメントに従ってログインフォームを作成しました: http://symfony.com/doc/3.1/security/form_login_setup.html

フォームログインが表示されますが、有効なユーザーに接続しようとすると何もありません:エラーもリダイレクトもありません...フォームはメッセージなしで再度表示されます!

これは私の security.yml です:

security:
providers:
    in_memory:
        memory: 
           users:
               superman:
                   password: clark
                   roles: ROLE_PRD, ROLE_CAT, ROLE_BATMAN
               batman:
                   password: bruce
                   roles: ROLE_CAT, ROLE_BATMAN
               test:
                   password: test
                   roles: ROLE_CAT, ROLE_BATMAN
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    autre:
        pattern: ^/catalogue/login
        security: false
    main:
        provider: in_memory
        anonymous: ~
        form_login:
            login_path: login
            check_path: login
            #default_target_path: /catalogue/admin/
        pattern: ^/catalogue/admin
access_control:
    - { path: ^/catalogue/admin/produit/$, roles: ROLE_BATMAN}
    - { path: ^/catalogue/admin/produit, roles: ROLE_PRD}
    - { path: ^/catalogue/admin/categorie, roles: ROLE_CAT}

そして、これは私のコントローラ SecurityController.php です:

<?php

namespace CatalogueBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;


use Symfony\Component\HttpFoundation\Response;

class SecurityController extends Controller
{

    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 new Response("<html> <body> SecuriteController </body>  </html>");

        return $this->render('securite/login.html.twig', array(
            'last_username' => $lastUsername,
            'error'         => $error,
        ));
    }
}

最後にビュー:

{% extends 'base.html.twig' %}
{% block body %}

{% if error %}
    <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}

<form action="{{ path('login') }}" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="_username" value="{{ last_username }}" />

    <label for="password">Password:</label>
    <input type="password" id="password" name="_password" />
    <button type="submit">login</button>
</form>

{% endblock %}    

ルーティング ファイル:

login:
  path:     /catalogue/login
  defaults: { _controller: CatalogueBundle:Security:login }

送信時に symfony セキュリティ システムがフォーム データをキャッチしていないようです。ログに何もありません!

4

1 に答える 1

0

ここには複数の問題があると思います。プロジェクトの継続を支援するために、

  1. 「成功時」にユーザーをリダイレクトしている場所がわかりません(security.ymlのコメントにあります)。ログイン後に、ユーザーが匿名でなくなった場合、「dev」ナビゲーションバーで確認できます。 .

  2. security.yml に問題があると思いますが、URL '/catalog/login' が 'autre' ファイアウォールにバインドされますが、フォームのログイン情報が正確ではありませんでした。 あなたのプロジェクトにはこれ以上の情報がないので、「autre」ファイアウォールを削除 (またはコメント) し、アクセス制御にログイン ルートを追加して、匿名を受け入れてください...

これらの情報を使って何かを試してみて、問題があれば戻ってきてください...

[編集] 'autre' ファイアウォールの 'form_login:' セクションを移動する必要があるかもしれません。プロバイダーを忘れないでください...

于 2016-12-15T11:53:28.530 に答える