2016-07-08 7 views
0

別のサイトの代わりにホームページにログインします。/loginルートに資格情報を入力すると、すべては問題ありませんが、/ routeでは動作しません。Symfony3:別のサイトでレンダリングしたときにログインフォームが機能しない

私は(テスト目的のために、私は今、各ページにログインフォームをレンダリングしたい)base.html.twigに、このコマンドを使用してログインフォームをレンダリング:ここ

{{ render(controller("AppBundle:Security:login")) }} 

は私login.html.twigです:

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

    <form action="{{ path('login') }}" method="post"> 
     <div class="form-group"> 
      <input type="text" class="form-control" id="username" placeholder="Email" name="_username" value="{{ last_username }}" /> 

      <input type="password" class="form-control" id="password" placeholder="Heslo" name="_password" /> 
     </div> 
     <button type="submit" class="btn btn-success">Přihlásit</button> 
     <a href="/registration" class="btn btn-info" role="button">Registrovat</a> 
    </form> 

そして、私のLoginActionの:security.ymlファイルで

/** 
    * @return array 
    * @Route("/login", name="login") 
    * @Template() 
    */ 
    public function loginAction() 
    { 
     $authenticationUtils = $this->get('security.authentication_utils'); 

     // get error 
     $error = $authenticationUtils->getLastAuthenticationError(); 

     // last username entered by the user 
     $lastUsername = $authenticationUtils->getLastUsername(); 

     return [ 
      'last_username' => $lastUsername, 
      'error'   => $error 
     ]; 
    } 

そしてsecured_area:

secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      provider: main 
      form_login: 
       login_path: login 
       check_path: login 
      logout: 
       path: /logout 
       target:/

ログインフォームは正常にホームページに表示されます。しかし、資格情報を入力してボタンをクリックすると、何も起こりません。おそらく、ボタンが、ログインページ用に定義されたアクションの代わりに、ホームページ用に定義されたアクションのフォームを見つけようとしているのでしょうか?

代わりに元の(ログイン)アクションを使用するようにボタンを強制するオプションはありますか?

ありがとうございました。

答えて

1

ログインフォームを表示するコントローラではなく、security.ymlに設定されたcheck_pathにログインフォームを送信する必要があります。

ユーザーを認証するのはこのURLです(セキュリティ拡張によって完全に遮断されます)。エラーが発生した場合は、ユーザーをログイン操作にリダイレクトします。 http://symfony.com/doc/current/cookbook/security/form_login_setup.html

+0

はありがとう:セットアップする方法フォームベースのログインを、ドキュメント内の専用料理の記事をご確認の詳細な手順については

。私はsymfonyにはまったく新しいので、check_pathにフォームを投稿する方法はわかりません。私は私の質問を更新しました - security.ymlの一部を追加しました。 check_pathの別のページを作成する必要がありますか?あなたは物事を働かせる方法の例を挙げていただけますか?ありがとうございます –

+0

私はあなたの答えをもう一度読んでいます。セキュリティ拡張がロギングを処理する必要があることを意味しますか?多分、レンダリングコントローララインがバグを引き起こすでしょうか?ロギングのためにボタンをクリックすると何も起こりません。ログインが失敗した場合、ボタンは/ loginにリダイレクトされるはずですか?送信ボタンにはパラメータがないことがわかります。/login以外のページでフォームをレンダリングすると、symfonyはロギングのボタンであることをどのように知ることができますか? –

+0

login_pathにcheck_pathと同じルートを使用しているようです。異なるURLを持つcheck_pathの新しいルートを作成する必要があります。その後、フォームタグで、アクションプロパティのチェックパスへのURLを生成する必要があります。 – Gerry

関連する問題