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 } 但是我得到以下错误:
你有什么想法可以解决概率吗?我已将authentication_handler我的服务设置为services.yml文件,但是我得到了上面提到的错误.
也许您可能会搞砸如何在services.yml中定义服务.请检查空格和yml语法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |