php - 在"主要"防火墙上,php Symfony3窗体登录仅适用

  显示原文与译文双语对照的内容

我正在尝试为我的Symfony3网站构建一个自定义防火墙。 我一直在遵循文档,并且能够让它在 main 防火墙中工作。 我想要的功能是使用用户的用户名和密码登录,并使用本机的本地类。 这是我的SecurityController:


namespace AppBundleController;



use SymfonyComponentHttpFoundationRequest;


use SymfonyBundleFrameworkBundleControllerController;


use SensioBundleFrameworkExtraBundleConfigurationRoute;



class SecurityController extends Controller


{


/**


 * @Route("/m/login", name="model_login")


 */


 public function loginAction(Request $request)


 {


 $authenticationUtils = $this->get("security.authentication_utils");


 $error = $authenticationUtils->getLastAuthenticationError();


 $lastUsername = $authenticationUtils->getLastUsername();



 return $this->render('Model/login.html.twig', [


"error" => $error,


"lastUsername" => $lastUsername


 ]);


 }


}



如你所见,与示例代码完全相同,只有 ,但路由设置已经更改。 我的登录表单呈现精美。 当我提交表单时没有错误,我将表单张贴到这个精确的控制器上。 如果我的安全设置在"主要。"下,我的视图能够完美地工作,这是我的security.yml:


security:


 providers:


 in_memory:


 memory: ~


 doctrine_provider:


 entity:


 class: AppBundle:Model


 property: username



 encoders:


 AppBundleEntityModel:


 algorithm: bcrypt



 firewalls:


 dev:


 pattern: ^/(_(profiler|wdt)|css|images|js)/


 security: false



 main:


 anonymous: ~



 model_area:


 anonymous: ~


 provider: doctrine_provider


 pattern: ^/m/


 form_login:


 login_path: model_login


 check_path: model_login


 access_control:


 - { path: ^/m/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }


 - { path: ^/m/, roles: ROLE_MODEL }



我的提供者和编码器正常工作,就像在"主要"防火墙下进行身份验证时。 但是,当我尝试在"model_area"下提交我的设置时,只需将我的表单重定向到登录表单,。 我只添加了 pattern: ^/m/- { path: ^/m/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 所以我不阻止访问登录表单。 其他的都是相同的( 连线路的名字) 。

我有一个路由 /m/model_dashboard,它引发一个错误,说"完全身份验证需要访问这里资源。 不过,"我的访问控制设置工作正常,但是当尝试访问资源时,它不会重定向到我的登录表单。

有什么我缺少的? 对于为什么身份验证将在 main 下工作,而不是在我的定制防火墙下,具有相同的精确设置。

时间: 原作者:

问题是我的main 防火墙。 我不知道防火墙的确定与路由类似,从上到下。 每个请求都被归档到"主要"防火墙( 没有 form_login ),这就是为什么我的登录代码无法正常工作。 我删除了 main 防火墙,它工作正常。 下面是我的更新 security.yml的外观:


security:


 providers:


 in_memory:


 memory: ~


 doctrine_provider:


 entity:


 class: AppBundle:Model


 property: username



 encoders:


 AppBundleEntityModel:


 algorithm: bcrypt



 firewalls:


 dev:


 pattern: ^/(_(profiler|wdt)|css|images|js)/


 security: false


 model_area:


 anonymous: ~


 provider: doctrine_provider


 pattern: ^/m/


 form_login:


 login_path: model_login


 check_path: model_login


 access_control:


 - { path: ^/m/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }


 - { path: ^/m/, roles: ROLE_MODEL }



原作者:
...