2016-08-24 4 views
0

このチュートリアルに従って、不完全なユーザーがOauthから来て、facebook/twitterアカウントに電子メールを持っていない場合に登録を強制します。Symfonyハンドルが動作しない

http://alexfu.it/2012/11/09/force-incomplete-users-to-complete-registration/

は、最後のステップでハンドル機能があり、それは今までトリガされていないようです。行方不明のものがありますか?

namespace FYP\UserBundle\Listener; 

use Symfony\Component\HttpKernel\Event\GetResponseEvent; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Security\Core\Exception\AccessDeniedException; 
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\Security\Http\Authorization\AccessDeniedHandlerInterface; 

class UserIncompleteListener implements AccessDeniedHandlerInterface 
{ 
    protected $security; 
    protected $router; 

    public function __construct($security, $router) 
    { 
     $this->security = $security; 
     $this->router = $router; 
    } 

    public function handle(Request $request, AccessDeniedException $accessDeniedException) 
    { 
     if(!is_null($this->security->getToken()->getUser()->getRoles()) && $this->security->getToken()->getUser()->getRoles() == array('ROLE_INCOMPLETE_USER')) { 
      return new RedirectResponse($this->router->generate('register_complete')); 
     } 
    } 
} 

設定:

fyp_user.access_denied.handler: 
     class:   FYP\UserBundle\Listener\UserIncompleteListener 
     arguments: 
      security: @security.context 
      router:  @router 

セキュリティ:

firewalls: 
     main: 
      access_denied_handler: fyp_user.access_denied.handler 

HERESに私のファイアウォール:

firewalls: 
    main: 
     access_denied_handler: fyp_user.access_denied.handler 
     pattern: ^/ 
     anonymous: ~ 
     oauth: 
      failure_path: /login 
      login_path: /login 
      check_path: /connect_check 
      provider: fos_userbundle 
      remember_me: true 
      always_use_default_target_path: false 
      default_target_path: /login 
      resource_owners: 
       facebook: "/external-login/check-facebook" 
       paypal: "/external-login/check-paypal" 
       amazon: "/external-login/check-amazon" 
      oauth_user_provider: 
       service: app.provider.oauth 
      remember_me: 
       key:  %secret% # pararmeter 
       lifetime: 31536000 # 365 days in seconds 
       path: /
       domain: ~ 
       always_remember_me: true 
     form_login: 
      login_path: /login 
      check_path: /login_check 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 
      csrf_provider: form.csrf_provider 
      remember_me: true 
     logout:  true 
     anonymous: true 
     switch_user: { role: ROLE_ALLOWED_TO_SWITCH, parameter: _new_user } 
     remember_me: 
      key:  %secret% # pararmeter 
      lifetime: 31536000 # 365 days in seconds 
      path: /
      domain: ~ 
      always_remember_me: true 

ありがとう!

答えて

0

サービス定義のkernel.event_listenerタグがありません。何らかの理由で、ブログ投稿の作者はそれを追加しませんでした。

あなたのサービス定義は、実際には次のようになります。

fyp_user.access_denied.handler: 
    class:   FYP\UserBundle\Listener\UserIncompleteListener 
    arguments: 
     security: @security.context 
     router:  @router 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception, method: handle } 

詳細情報については、events and listenersthis SO answerにsymfonyのドキュメントを見てみましょう。

+0

ありがとう、私はそれを追加し、ドキュメントを読んでも、それはまだトリガーされません。 – Jeremy

関連する問題