私のプロジェクトは完全にプライベートなインターフェイスで、ユーザはログインするためにサインインする必要があります。私はログインフォームを作成しようとしています。だから、私は/ admin /フォルダが私のアーキテクチャでは必要ありません。Symfony3ログインフォーム:security.ymlのファイアウォールのパラメータ設定方法
私は従来のログインフォームを構築するためにSymfony instructionsに従った。
ホームページ(または別のもの)を取得しようとすると、ログインフォームにリダイレクトされます。この時点で、すべては大丈夫です。
しかし、私の問題は、ログインページにリダイレクトループがあることです。サインインしようとすると、私たちが見たいページの代わりにログインページに毎回リダイレクトされます。
私のsecurity.ymlファイルには、ファイアウォール設定のレベルに問題があると思います。
のsecurity.yml
まず、私は、少なくとも、私はデータベースに保存されているユーザーを取得します、シングルでシンプルなユーザーと私のログインフォームをテストしたいけど。それはテストのためのものです。
セキュリティで保護された領域は、ログインページ以外のすべてのインターフェイスです。そのため、ログインファイアウォール(正確にはSymfony recommends it)を実行しました。
security:
providers:
in_memory:
memory:
users:
mylogin:
password: mypwd
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/login$
anonymous: ~
secured_area:
pattern: ^/
provider: in_memory
form_login:
login_path: login
check_path: login
# csrf token options
csrf_parameter: _csrf_token
csrf_token_id: authenticate
csrf_token_generator: security.csrf.token_manager
logout:
path: /logout
target:/
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_ADMIN }
ページのアーキテクチャ:
- /default/index.html.twig
- /security/login.html.twig
のrouting.yml
login:
path: /login
defaults: { _controller: AppBundle:Security:login }
logout:
path: /logout
SecurityController.php私は間違っ
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
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 $this->render(
'security/login.html.twig',
array(
'last_username' => $lastUsername,
'error' => $error,
)
);
}
}
?なぜ私は自分のフォームにリダイレクトループがあるのか分かりません。私は偽のログイン名とパスワードを入れると また、symfonyはそれが何をすべきとのエラーが表示されない:
login.html.twig私はアドバイスを必要とする
{% if error %}
<p class="bg-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</p>
{% endif %}
は、私を助けてください;-) ありがとう!
私は同じ問題を抱えています。あなたのソリューションでは、フォームを送信するときにエラーが発生します。無効なCSRFトークン。私は本当にundestand問題は何ですか! – Sam
ログインフォームにCSRFフィールドを追加しましたか?これを読んでください:http://symfony.com/doc/current/security/csrf_in_login_form.html – Felurian