2017-03-04 18 views
2

fosuserbundleとsymfonyでログインした後、最後のページにアクセスするには?Symfony - ログイン後に訪問した最後のページにユーザをリダイレクトする方法は?

私のコントローラでは、まずユーザーがログインしているかどうかを確認します。ログインしていない場合は、ログインページにリダイレクトします。私のコントローラの冒頭で使用した短いコードはここにあります。

$autenthicated = $this->checkAuth(); 
if($autenthicated==true){ 
    return $this->render('MainBundle:Default:home.html.twig'); 
}else{ 
    return $this->redirect($this->generateUrl('login_connect')); 
} 

問題は、ユーザーがログインした後、彼は代わりにメインページ訪問した最後のページにリダイレクトされていることです。

私は彼を私のカスタムログインページにリダイレクトする必要がありますか?明らかにこれは動作していません。

return $this->redirect($this->generateUrl('login_connect')); 

答えて

2

あなた自身でログインルートへのリダイレクトを処理する必要はありません。

コントローラにAccessDeniedExceptionを投げた場合、セキュリティコンポーネントはログインページ(パラメータとしてアクセスしようとしたページ)にリダイレクトします。

ログイン後、ネイティブのLoginSuccessHandlerが目的のページにリダイレクトします。

またControllerショートカットを使用することができます。

$this->denyAccessUnlessGranted(['ROLE_USER']);// check your needed roles here 

ログイン後にリダイレクトロジックをオーバーライドする必要がある場合は、あなたがサービスを定義し、リダイレクトを処理するために、このいずれかを使用するセキュリティコンポーネントを伝えることができます。ここで

はダミーの例です:リダイレクトロジックと

PHPのサービス:
AppBundle/Security/LoginSuccessHandler.php

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface 
{ 

    // … 

    /** 
    * @param Request  $request 
    * @param TokenInterface $token 
    * @return RedirectResponse 
    */ 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     // your stuff 
     return new RedirectResponse($this->router->generate(‘custom_route’)); 
    } 
} 

サービスの設定:

# services.yml 
app.login_success_handler: 
     public: false 
     class: AppBundle\Security\LoginSuccessHandler 
     arguments: ["@security.token_storage", "@router"] 

カスタムハンドラを使用するために、セキュリティコンポーネントを設定します:

# security.yml 
security: 
    firewalls: 
     main: 
      form_login: 
       success_handler: app.login_success_handler 
+0

本当にありがとうございました – 118218

関連する問題