Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony安全重定向到登录页面_Php_Symfony_Symfony Security - Fatal编程技术网

Php Symfony安全重定向到登录页面

Php Symfony安全重定向到登录页面,php,symfony,symfony-security,Php,Symfony,Symfony Security,如果我有一个安全的路由,比如下面的面板,Symfony将只允许登录用户访问 - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/panel, r

如果我有一个安全的路由,比如下面的
面板
,Symfony将只允许登录用户访问

    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/panel, role: ROLE_USER }
对于未登录的用户,它将始终将他们重定向到登录路径(我使用的是FOSUserBundle):

在哪里可以禁用或覆盖此重定向?我想直接显示登录表单,而不重定向用户

我相信这与
AccessDeniedHandlerInterface
有关,但在security.yml中需要覆盖哪些密钥?默认实现在哪里


对于其他情况,我们有
DefaultLogoutSuccessHandler、DefaultAuthenticationFailureHandler、DefaultAuthenticationSuccessHandler
,我们可以为这些情况中的每一种实现一个服务,扩展它们各自的接口,并以自定义方式处理这种情况。但找不到AccessDenied的任何内容。仅包含接口。

我将手动执行此操作

让匿名用户可以访问您的路线:

- { path: ^/panel, role: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] }
在模板中,检查是否有登录用户:

{% if app.user is null %}
    <!-- Then display your login form -->
{% else %}
    <!-- Display the normal view -->
{% endif %}

这样,您可以根据用户是否经过身份验证来制定逻辑。

有什么好处?登录后,用户将被重定向回/panel,感觉没有任何不同-我缺少什么?我想在一些路由上添加一个登录页面。用户想要访问页面,但他没有登录,所以我向他展示了登录表单,在登录(使用ajax)后,他会被重定向到面板。要显示登录表单,你也应该允许匿名访问。因此,检查控制器中的权限(例如)是有意义的。不过,我还是想知道这张支票是在哪里开出的。对于其他情况,我们有
AuthenticationSuccessHandlerInterface、AuthenticationFailureHandlerInterface、LogoutSuccessHandlerInterface
。我相信这是接口
AccessDeniedHandlerInterface
,但我需要在哪里包括实现此功能的服务,默认值在哪里?关于您的第一条评论:最终用户结果与默认实现完全相同(用户已登录->直接查看页面,用户未登录->重定向到登录页面->登录成功->重定向到面板)除了它使用HTTP重定向而不是AJAX。这就是我要问的:在技术上有必要将这种行为更改为AJAX吗?考虑到用户想要访问面板页面,他被重定向到一个页面,在那里我显示登录表单(使用AJAX获取并验证),如何知道登录后要重定向用户的页面(在本例中为页面),以及如何知道用户最初是否想要登录(登录表单是一个模式,内容是通过ajax检索的)?在你的问题中,你是说你不想重定向用户,只显示登录表单。要知道你的用户试图访问哪个页面,请使用
app.request.headers.get('referer')
from twig或
$this->getRequest()->headers->get('referer'))
来自控制器。然后,如果您想在登录后重定向到referer,请添加一个
\u target\u path
作为表单字段,用检索到的referer填充它,并在处理表单的方法中进行重定向(如果您的表单由FOSUser处理,则将自动使用
\u target\u path
).如果您需要示例,我可以快速编辑。
{% if app.user is null %}
    <!-- Then display your login form -->
{% else %}
    <!-- Display the normal view -->
{% endif %}
if (!is_object($this->get('security.token_storage')->getToken()->getUser())) {
    // Render the login form
}