加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Symfony 3.2“security.firewall.map.context.main”依赖

发布时间:2020-12-13 18:00:29 所属栏目:PHP教程 来源:网络整理
导读:在我个人的Symfony 3.2项目( https://github.com/pc-magas/photoalbum)上,因为我想获得一个Json而不是基于 http://www.webtipblog.com/adding-an-ajax-login-form-to-a-symfony-project/的重定向,我做了以下身份验证管理器: ?phpnamespace AppBundleSecuri
在我个人的Symfony 3.2项目( https://github.com/pc-magas/photoalbum)上,因为我想获得一个Json而不是基于 http://www.webtipblog.com/adding-an-ajax-login-form-to-a-symfony-project/的重定向,我做了以下身份验证管理器:
<?php

namespace AppBundleSecurity;

use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpFoundationRedirectResponse;
use SymfonyComponentRoutingRouterInterface;
use SymfonyComponentHttpFoundationSessionSession;
use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface;
use SymfonyComponentSecurityCoreExceptionAuthenticationException;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentSecurityCoreSecurityContextInterface;
use SymfonyComponentSecurityHttpAuthenticationAuthenticationSuccessHandlerInterface;
use SymfonyComponentSecurityHttpAuthenticationAuthenticationFailureHandlerInterface;

class AuthenticationHandler implements AuthenticationSuccessHandlerInterface,AuthenticationFailureHandlerInterface
{
    private $router;
    private $session;

    /**
     * Constructor
     *
     * @author  Joe Sexton <joe@webtipblog.com>
     * @param   RouterInterface $router
     * @param   Session $session
     */
    public function __construct( RouterInterface $router,Session $session )
    {
        $this->router  = $router;
        $this->session = $session;
    }

    /**
     * onAuthenticationSuccess
     *
     * @author  Joe Sexton <joe@webtipblog.com>
     * @param   Request $request
     * @param   TokenInterface $token
     * @return  Response
     */
    public function onAuthenticationSuccess( Request $request,TokenInterface $token )
    {
        // if AJAX login
        if ( $request->isXmlHttpRequest() ) {

            $array = array( 'status' => true ); // data to return via JSON
            $response = new Response( json_encode( $array ) );
            $response->headers->set( 'Content-Type','application/json' );

            return $response;

            // if form login
        } else {

            if ( $this->session->get('_security.main.target_path' ) ) {

                $url = $this->session->get( '_security.main.target_path' );

            } else {

                $url = $this->router->generate( 'home_page' );

            } // end if

            return new RedirectResponse( $url );

        }
    }

    /**
     * onAuthenticationFailure
     *
     * @author  Joe Sexton <joe@webtipblog.com>
     * @param   Request $request
     * @param   AuthenticationException $exception
     * @return  Response
     */
    public function onAuthenticationFailure( Request $request,AuthenticationException $exception )
    {
        // if AJAX login
        if ( $request->isXmlHttpRequest() ) {

            $array = array( 'status' => false,'message' => $exception->getMessage() ); // data to return via JSON
            $response = new Response( json_encode( $array ) );
            $response->headers->set( 'Content-Type','application/json' );

            return $response;

            // if form login
        } else {

            // set authentication exception to session
            $request->getSession()->set(SecurityContextInterface::AUTHENTICATION_ERROR,$exception);

            return new RedirectResponse( $this->router->generate( 'login_route' ) );
        }
    }
}

我像这样配置了我的services.yml:

parameters:

services:
  authentication_handler:
    class: AppBundleSecurityAuthenticationHandler
    public: false
    arguments: ["@router","@session"]

我配置了security.yml:

security:
   encoders:
        FOSUserBundleModelUserInterface: bcrypt

   role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

   providers:
        fos_userbundle:
            id: fos_user.user_provider.username

   firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
                check_path:      security_check_route
                success_handler: authentication_handler
                failure_handler: authentication_handler

            logout:       true
            anonymous:    true

   access_control:
        - { path: ^/login$,role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register,role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting,role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/,role: ROLE_ADMIN }

但是我得到以下错误:

The service “security.firewall.map.context.main” has a dependency on a non-existent service “authentication_handler”.

你有什么想法可以解决概率吗?我已将authentication_handler我的服务设置为services.yml文件,但是我得到了上面提到的错误.

也许您可能会搞砸如何在services.yml中定义服务.请检查空格和yml语法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读