【问题标题】:Symfony Handle Not WorkingSymfony 句柄不工作
【发布时间】:2016-08-24 15:43:45
【问题描述】:

所以我按照本教程强制不完整的用户注册,如果他们来自 Oauth 并且在他们的 facebook/twitter 帐户中没有电子邮件。

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

这是我的防火墙:

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

谢谢!

【问题讨论】:

    标签: symfony oauth-2.0 registration


    【解决方案1】:

    您的服务定义中缺少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 文档。

    【讨论】:

    • 谢谢,我添加了这个并阅读了文档,但它仍然不会触发。
    猜你喜欢
    • 2019-04-21
    • 2011-08-28
    • 1970-01-01
    • 2015-01-16
    • 2016-11-08
    • 2014-10-08
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多