2017-08-09 79 views
1

我建立了一個網站,symfony的2.8,我用FOSUserBundle進行認證,用戶管理等,我有可以解決的問題。 對於我來說沒有明顯的原因,「rememberme」cookie不會像預期的那樣行事。FOSUser - 記住我的功能問題

我敢肯定,我只是錯過了以某種方式配置參數,但因爲時間我在尋找它並不能找到它。

我使用的是Apache 2.0的服務器上的PHP 7.0。

還有就是我config.yml文件(大部分):

framework: 
    #esi:    ~ 
    translator:  { fallbacks: ["%locale%"] } 
    secret:   "%secret%" 
    router: 
     resource: "%kernel.root_dir%/config/routing.yml" 
     strict_requirements: ~ 
    form:   ~ 
    csrf_protection: ~ 
    validation:  { enable_annotations: true } 
    #serializer:  { enable_annotations: true } 
    templating: 
     engines: ['twig'] 
    default_locale: "%locale%" 
    trusted_hosts: ~ 
    trusted_proxies: ~ 
    session: 
     # handler_id set to null will use default session handler from php.ini 
     handler_id: ~ 
     save_path: "%kernel.root_dir%/sessions/" 
    fragments:  ~ 
    http_method_override: true 

... 

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: UserBundle\Entity\User 

    from_email: 
     address:  "%email_referer%" 
     sender_name: "App" 
    group: 
     group_class: UserBundle\Entity\Group 
     group_manager: sonata.user.orm.group_manager 
    resetting: 
     email: 
      template: :mail:resetting_password.html.twig 
    service: 
     mailer:   fos_user.mailer.twig_swift 
     user_manager: sonata.user.orm.user_manager 

而且還有我的security.yml:

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

    role_hierarchy: 
     ROLE_CHAMPION: [ROLE_USER] 
     ROLE_ENTREPRISE: [ROLE_USER] 
     ROLE_ADMIN:  [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_A, ROLE_B] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     SONATA: 
      - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT 

    providers: 
     fos_userbundle: 
      id: fos_user.user_manager 

    firewalls: 
     admin: 
      pattern: ^/admin 
      context: user 
      form_login: 
       provider:    fos_userbundle 
       login_path:    login 
       use_forward:   true 
       check_path:    sonata_user_admin_security_check 
       failure_path:   null 
       default_target_path: sonata_admin_dashboard 
      logout: 
       path:    sonata_user_admin_security_logout 
       target:    homepage 
       invalidate_session: false 
      anonymous: true 

     # disables authentication for assets and the profiler, adapt it according to your needs 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     main: 
      pattern: .* 
      context: user 
      form_login: 
       provider:    fos_userbundle 
       login_path:    login 
       use_forward:   false 
       check_path:    /login_check 
       failure_path:   null 
       csrf_token_generator: security.csrf.token_manager 
       default_target_path: profile 
      logout: 
       path:    logout 
       target:    homepage 
       invalidate_session: false 
      anonymous: true 
      remember_me: 
       secret:  '%secret%' 
       lifetime: 15724800 # 6 months 
       path:  /
       domain:  ~ 
       secure:  true 

    access_control: 
     # Some public pages 
     - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/cgu$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/cgv$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/contact$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/faq$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # URL of FOSUserBundle which need to be available to anonymous users 
     - { path: ^/connexion, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Admin login page needs to be accessed without credential 
     - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     # - { path: ^/admin/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Admin 
     - { path: ^/admin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] } 
     # Partie connectée 
     - { path: ^/, role: IS_AUTHENTICATED_REMEMBERED } 

    acl: 
     connection: default 

編輯:

我做了一些測試,看起來我的REMEMBERME cookie沒有被刪除,它仍然在這裏,具有和以前相同的startdate和enddate。

所以,我可以關閉和打開瀏覽器時,cookie是還在這裏,我做到這一點時,我仍然認證(可以去管理員)。但是,當我在一段時間內保持「閒置」狀態並想要訪問管理部分時,我會重定向到登錄頁面。 REMEMBERME cookie仍然存在,但此時,我無法訪問我啓動瀏覽器時可以訪問的頁面。

編輯2: 看來會話的生命期是我的問題的「原因」。但我想要的是,當用戶選中「記住我」選項時,他不再需要再次登錄,即使他將我的網站標籤在後臺打開了x天(如移動瀏覽器)。我怎樣才能做到這一點 ?

編輯16/08/2017: 我添加了一行在我security.yml文件: 域:〜 看來,這條線使系統工作。 Chrome和Firefox在我的計算機上不再檢測到該問題(以防其中一個用我的Cookie進行播放)。

PS:我會在幾天更新這張門票,以「驗證」它,如果這個問題沒有再次出現。

回答

0

問題不再出現,解決方案似乎是「域」參數:

domain:  ~ 
2

我認爲你在談論你的會話生命期,而不是記住我的功能。

在你config.yml您可以配置爲使用自定義會話有效期的框架。

framework: 
    session: 
     cookie_lifetime: 3600 

如果未設置此配置,將使用您的php.ini中的值。

希望它有幫助。

+0

我明白這裏是如果一個標籤爲您開放,3600多秒,用戶必須重新登錄。我想要的是當用戶選中「記住我」選項時,他不再需要再次登錄。我怎樣才能使這成爲可能? – Naelyth