0

FOSUserBundleをインストールしましたが、ログインフォームが別のログインページではなくホームページに表示される必要がありますが、HomeBundle:Default:indexによって制御されるホームページに含まれている必要があります。

したがって、ログインが必要なページにアクセスすると、ログインフォームがあるホームページにリダイレクトされます。

これを行うために:私は変更しましたvendor > friendsofsymfony > user-bundle > FOS > Resources > routing > security.xml

<route id="fos_user_security_login" pattern="/login">
    <default key="_controller">FOSUserBundle:Security:login</default>
</route>

ホームページを表示するコントローラーをポイントします。これは機能します(ログインページが表示されます)が、ここで問題が発生します。ログインしようとすると、ログインせず、代わりに同じページが表示されます。入力の名前は正しく、デフォルトのログインフォームと同じ値であるde"action"です。

デフォルトでログインページを使用するとログインするので、dbは問題ありません。ログインプロセスで、このコードを理解する$errorを出力する可能性のあるエラーを出力しようとしました。

$ request = $ this-> container-> get('request'); / * @var $ request \ Symfony \ Component \ HttpFoundation \ Request / $ session = $ request-> getSession(); / @var $ session \ Symfony \ Component \ HttpFoundation \ Session * /

    // get the error if any (works with forward and redirect -- see below)
    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
    } elseif (null !== $session && $session->has(SecurityContext::AUTHENTICATION_ERROR)) {
        $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        $session->remove(SecurityContext::AUTHENTICATION_ERROR);
    } else {
        $error = '';
    }

    if ($error) {
        // TODO: this is a potential security risk (see http://trac.symfony-project.org/ticket/9523)
        $error = $error->getMessage();
    }
    // last username entered by the user
    $lastUsername = (null === $session) ? '' : $session->get(SecurityContext::LAST_USERNAME);

    $csrfToken = $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate');

しかし、エラーはないようです。

4

3 に答える 3

3

Resources/views/Security/ フォルダー内のファイル login.html.twig を書き換えます。

ベースコードは次のとおりです。

{% extends "FOSUserBundle::layout.html.twig" %}

{% block fos_user_content %}
{% if error %}
    <div>{{ error|trans({}, 'FOSUserBundle') }}</div>
{% endif %}

<form action="{{ path("fos_user_security_check") }}" method="post">
    <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />

    <label for="username">{{ 'security.login.username'|trans({}, 'FOSUserBundle') }}</label>
    <input type="text" id="username" name="_username" value="{{ last_username }}" required="required" />

    <label for="password">{{ 'security.login.password'|trans({}, 'FOSUserBundle') }}</label>
    <input type="password" id="password" name="_password" required="required" />

    <input type="checkbox" id="remember_me" name="_remember_me" value="on" />
    <label for="remember_me">{{ 'security.login.remember_me'|trans({}, 'FOSUserBundle') }}</label>

    <input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans({}, 'FOSUserBundle') }}" />
</form>
{% endblock fos_user_content %}
于 2013-04-03T15:40:31.037 に答える
1

getParent メソッドをオーバーライドすることも忘れないでください。ドキュメントが言うように。

<?php

namespace Acme\UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeUserBundle extends Bundle
{
    public function getParent()
   {
    return 'FOSUserBundle';
   }
}

?>
于 2013-07-13T21:31:59.957 に答える
0

テンプレートを上書きするには、こちらの手順に従ってくださいlogin.html.twig

私はそれをやった。

于 2012-10-05T03:17:30.117 に答える