symfony2:使用 fosuserbundle 登录后使用引用

Posted

技术标签:

【中文标题】symfony2:使用 fosuserbundle 登录后使用引用【英文标题】:symfony2 : using referer after login with fosuserbundle 【发布时间】:2014-01-19 16:15:44 【问题描述】:

我在登录成功后使用 fosuserbundle 将用户重定向到引用者时遇到问题

app/config/security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        main:
            pattern: ^/

            form_login:
                provider: fos_userbundle
                login_path:     fos_user_security_login
                use_referer:                    true
                check_path:     fos_user_security_check
                csrf_provider: form.csrf_provider
            logout:
                path: fos_user_security_logout
            anonymous:    true

    access_control:
        -  path: ^/%locale%/login$, role: IS_AUTHENTICATED_ANONYMOUSLY 
        -  path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY 
        -  path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY 

还有 config.yml:

fos_user:
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
    firewall_name: main
    user_class: Acme\UserBundle\Entity\User

    profile:
      form:
          type: Acme_user_registration
    registration:
      confirmation:  enabled: true 
      form:
          type: Acme_user_registration
      confirmation:
          enabled:    true
          from_email:
              address:        webmaster@acme.com
              sender_name:    administrateur de Acme.com
    resetting:
        token_ttl: 86400
        email:
            from_email: # Use this node only if you don't want the global email address for the resetting email
              address:        webmaster@Acme.com
              sender_name:    administrateur de Acme.com

不幸的是,当用户成功登录时,他总是被重定向到主页,尽管我的 security.yml 配置文件中有“use_referer: true”...

有人能帮帮我吗?

【问题讨论】:

问题仍然是实际的,因为似乎 use_referer: true 只是在那里不起作用。 同样的问题 use_referer 没有工作的答案也没有工作任何其他解决方案??我的推荐人值在表单中结果为空 【参考方案1】:

好的,我找到了解决方案。在登录表单中,我添加了一个隐藏字段“_target_path”,并为其提供了引用者的值......它似乎工作正常

% if app.request.get('_route') != app.request.headers.get('referer') %    
    <input type="hidden" name="_target_path" value=" app.request.headers.get('referer') " />    
% endif %

【讨论】:

THX ,但是有一个小问题需要注意,因为路由永远不会针对引用者进行验证......您可能需要检查路由 path 是否在而是引用者...【参考方案2】:

这适用于 symfony 3.2, 而referer-header解决方案没有。

security.yml

 firewalls:
    main:
        form_login:
            use_referer: true

login.html.twig

<input type="hidden" 
       name="_target_path" 
       value=" app.session.get("_security.main.target_path") ">

【讨论】:

【参考方案3】:

Symfony2.5:

        form_login:
            provider:       fos_userbundle
            login_path:     fos_user_security_login
            use_forward:    false
            check_path:     fos_user_security_check
            failure_path:   null
            always_use_default_target_path: false
            default_target_path: XXXXXXX_OF_YOUR_CHOICE

这对我有用

【讨论】:

以上是关于symfony2:使用 fosuserbundle 登录后使用引用的主要内容,如果未能解决你的问题,请参考以下文章

FOSUserBundle 使用电子邮件登录 (Symfony2)

使用 FOSUserBundle 自动登录 Symfony2 [重复]

Symfony2:FOSUserBundle 删除操作错误

Symfony2 多 FosUserBundle

使用 FosUserBundle symfony2 管理多个角色

Symfony2:使用 FOSUserBundle 时如何在控制器内获取用户对象?