如果我没有登录,Symfony 防火墙不会重定向我

Posted

技术标签:

【中文标题】如果我没有登录,Symfony 防火墙不会重定向我【英文标题】:Symfony firewall doesn't redirect me if i'm not login 【发布时间】:2015-11-08 20:12:32 【问题描述】:

好的,伙计们,我花了 10 个小时来寻找解决问题的方法。如果我没有登录,我在 Symfony 2.7 上的防火墙不会重定向我。

如果我访问 domain.com/admin/,防火墙应该将我重定向到 /login,但不会。

我使用 FOSUSerBundle。 我总是收到此错误消息:

您未通过身份验证 401 Unauthorized - HttpException 1 已链接 异常:AuthenticationCredentialsNotFoundException »

这是我的代码:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    admin:
        pattern: ^/
        context: site
        form_login:
            provider: fos_userbundle
            check_path: /login_check
            login_path: /login
        logout:
            path: /admin/logout
        anonymous: false

我的访问控制:

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 

如果您愿意,这里是 phpStorm 中的代码:

感谢您的帮助!

【问题讨论】:

尝试将 anonymous 设置为 true 用于管理防火墙。并且不要忘记清除缓存 我已经尝试过了,但没有成功:/匿名为真,错误消息是:“您没有必要的权限 - 403 Forbidden - AccessDeniedHttpException”(缓存已清除) 您可以尝试为管理员防火墙设置pattern: ^/admin/ 吗? 好吧哇我终于找到问题了!! FOSRestBundle 与 FOSUserBundle 有冲突。如果我在 config.yml 中禁用 RestBundle,一切正常!!感谢您抽出时间维克多,我真的很感激! @coolfarmer 你应该发布你的解决方案作为答案并接受它 【参考方案1】:

终于找到问题了!! FOSRestBundle 与 FOSUserBundle 有冲突。如果我在 config.yml 中禁用 RestBundle,一切正常!!

所以,我只是将我的 API 包移动到另一个 symfony 项目中。 一个项目用于我的 API,一个项目用于我的网站。

【讨论】:

以上是关于如果我没有登录,Symfony 防火墙不会重定向我的主要内容,如果未能解决你的问题,请参考以下文章

symfony2 安全 - 禁用登录路径并显示禁止

Symfony 3,一个应用程序中的 2 个防火墙

Symfony - 如何将用户重定向到登录后访问的最后一个页面?

Symfony FOSUserBundle 持久化 sf_redirect

Symfony 安全重定向到登录页面

Symfony 身份验证器未正确验证身份验证器在重定向后不会保留用户