我建立了一個網站,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:我會在幾天更新這張門票,以「驗證」它,如果這個問題沒有再次出現。
我明白這裏是如果一個標籤爲您開放,3600多秒,用戶必須重新登錄。我想要的是當用戶選中「記住我」選項時,他不再需要再次登錄。我怎樣才能使這成爲可能? – Naelyth