我正在使用FOSUserBundle + FOSFacebookBundle,我正在尝试登录后登录和注册页面无法访问。如果用户登录并正在访问其中一个页面,则应将其重定向到防火墙default_target_path中定义的页面。
问题是我不知道如何在控制器内部获取default_target_path。我正在使用
$request->getSession()->get('_security.target_path');
但它返回null。
这是我的security.yml文件:
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
chainprovider:
chain:
providers: [ fos_userbundle, fos_facebookbundle]
fos_userbundle:
id: fos_user.user_provider.username
fos_facebookbundle:
id: fos_facebookbundle
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /
fos_facebook:
app_url: "FB_APP_URL"
server_url: "APP_URL"
login_path: /login
check_path: /login_fb_check
default_target_path: /
provider: fos_facebookbundle
logout: true
anonymous: true
dev:
pattern: ^/(_(profiler|wdt)|css|images|js|font)/
security: 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 }
有什么想法吗?
谢谢。
答案 0 :(得分:2)
集:
firewalls:
main:
pattern: ^/
form_login:
# ...
default_target_path: %target_path%
在parameters.yml
parameters:
# ...
target_path: /
# ...
而不是通过以下方式获得价值:
$this->container->getParameter('target_path');
答案 1 :(得分:0)
你错过了get:
中的一部分$request->getSession()->get('_security.main.target_path');