Login Symfony用户在部署时被断开连接

Login Symfony用户在部署时被断开连接,login,symfony,fosuserbundle,Login,Symfony,Fosuserbundle,在服务器上部署应用程序时,我遇到了以下问题: 当我手动记录我的用户时,它工作正常,当我转到配置文件、编辑时,它工作正常! 但是 当我转到一个不由FOSUserBundle处理的页面时,我的用户不再登录 $token = new UsernamePasswordToken($user, $user->getPassword(), $providerKey, $user->getRoles()); $userProvider = new UserProvider($this->ge

在服务器上部署应用程序时,我遇到了以下问题: 当我手动记录我的用户时,它工作正常,当我转到配置文件、编辑时,它工作正常! 但是

当我转到一个不由FOSUserBundle处理的页面时,我的用户不再登录

$token = new UsernamePasswordToken($user, $user->getPassword(), $providerKey, $user->getRoles());
$userProvider = new UserProvider($this->get('fos_user.user_manager'));       

$this->get("security.token_storage")->setToken($token);

$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
但在当地,它起作用了

如果你有任何想法。。。很高兴,谢谢

编辑: 这是我的保安

# app/config/security.yml

security:
  encoders:
    Canapey\UserBundle\Entity\User:  sha512

  role_hierarchy:
    ROLE_USER:        [ROLE_USER]
    # Un admin hérite des droits d'auteur et de modérateur
    ROLE_ADMIN:       [ROLE_USER, ROLE_MODERATEUR]
    # On garde ce rôle superadmin, il nous resservira par la suite
    ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

  providers:
    main:
      id: fos_user.user_provider.username_email

  firewalls:
    dev:
      pattern: ^/(_(profiler|wdt)|css|images|js)/
      security: false
    main:
      pattern:      ^/
      anonymous:    true
      provider:     main
      form_login:
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_token_generator: security.csrf.token_manager
        always_use_default_target_path : true
      logout:
        path:       fos_user_security_logout
        target:     /
      remember_me:
        secret:     "%secret%" # %secret% est un paramètre de parameter 
        always_remember_me: true


  access_control:
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }

简而言之:在
config.yml
中获取会话的路径:

framework:
    ...
    session:
        ...
        save_path: ...
并确保在部署期间不会更改/清空

细节 大多数部署系统在部署过程中清理所有工作文件夹(例如
缓存
tmp
会话
),甚至使用基于版本的结构,其中实际根目录每次都是从头创建的,并软链接到当前的
目录(请参见Capistrano:)


在这些情况下,会话在部署过程中会被破坏,因此您当然会注销。

FOSUserBundle并不真正处理与安全相关的事情。如果您的用户未登录到某些页面,可能是因为您的防火墙配置过紧。如果您仅在
/admin
上设置防火墙,而不在
/
上设置防火墙,则
SecurityContext
将不可用。我添加了我的security.yml,为“/”定义了一个角色。此外,当我使用fosuserbundle连接连接自己时,它会起作用,无论我走到哪里,我都会保持连接:/