【问题标题】:Firewall redirect to translated page防火墙重定向到翻译页面
【发布时间】:2013-11-18 14:58:04
【问题描述】:

我有一个安装了FOSUserBundle 的 Symfony2 项目。当用户尝试访问http://myhost.com/forum 时,系统会将他重定向到http://myhost.com/login。 这是我的security.yml 文件:

jms_security_extra:
secure_all_services: false
expressions: true

security:
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    in_memory:
        memory:
            users:
                user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

    login:
        pattern:  ^/demo/secured/login$
        security: false

    secured_area:
        pattern:    ^/demo/secured/
        form_login:
            check_path: /demo/secured/login_check
            login_path: /demo/secured/login
        logout:
            path:   /demo/secured/logout
            target: /demo/
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

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 }
    - { path: /forum/, role: ROLE_USER }

现在我重新生成了 URL,以便按照本教程进行翻译:https://coderwall.com/p/eiqd_g

一切正常,除非我尝试访问 http://myhost.com/en/forum ,因为它重定向到 http://myhost.com/login 而不是 http://myhost.com/en/login

我错过了什么?

更新:

由于我在main (login_path) 处添加了一行:

    main:
        pattern: ^/
        form_login: 
            login_path: /%locale%/login
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

它重定向到 http://myhost.com/es/login 而不是 http://myhost.com/en/login ,而其他 URL 保留 /en/ URL。实际上,/es/ 并不存在,因为它是默认语言。有什么建议吗?

【问题讨论】:

    标签: php symfony login internationalization fosuserbundle


    【解决方案1】:

    您还应该为登录路径创建一个路由,如下所示:

    login_path:
        path: /{_locale}/login
    

    您不需要为它定义控制器,并且在您的 security.yml 中只需将 login_path: /demo.... 的行替换为 login_path: login_path

    【讨论】:

    • 它不起作用。但多亏了你,我向前迈进了。你可以看看我更新的问题。
    • 无论如何,按照我在那里写的那样创建一个路由,它会更容易,也许你需要使用一个可以处理语言环境的监听器。如果您只是转到 url /en/login 会发生什么?
    • 如果您查看我遵循的教程,您会发现我已经安装了一个自动生成路由的包。
    【解决方案2】:

    main 防火墙更改为下一个 sn-p 代码效果很好。

    main:
        pattern: ^/
        form_login: 
            login_path: fos_user_security_login
            check_path: fos_user_security_check
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:
            path: fos_user_security_logout
            target: fos_user_security_login
        anonymous:    true
    

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多