[英]Complex firewall configuration - Symfony2 security
情況如下:
我目前有兩個現有的防火牆-即main
和admin
。 我需要以某種方式為購物區域添加第三個防火牆。
我的商店基本上有以下步驟:
Select subscription -> user creation/login -> Capture billing information -> Review purchase -> Capture payment
新的要求是,如果用戶尚未登錄,我需要捕獲用戶信息和賬單地址, 而不是將其存儲在用戶存儲庫中 -客戶的論點是,這將停止將電子郵件地址鎖定到可能並沒有遍及整個購買流程,因此,如果用戶決定繼續使用該電子郵件地址,則將來無法使用該電子郵件地址。
這是我想到的身份驗證流程:
shop
的新防火牆。 shop/account/create
。 此步驟將在系統中創建一個新訂單,標記為initiated
。 該訂單將包含提供的用戶信息以及會話ID。 沒有創建實際的用戶帳戶。 initiated
訂單,並根據該訂單內的用戶信息構造一個已認證令牌和一個模擬用戶實體。 我已經為定制身份驗證提供程序制作了原型,這是我的security.yml
:
firewalls:
main:
pattern: ^/
form_login:
check_path: /user/login_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /user/home
logout:
invalidate_session: false
path: /user/logout
target: /
admin:
pattern: ^/admin
form_login:
login_path: /admin/login
check_path: /admin/login_check
provider: app_adminbundle
csrf_provider: form.csrf_provider
default_target_path: /admin
logout:
invalidate_session: false
path: /admin/logout
target: /admin/login
shop:
pattern: ^/shop
shop_auth: true
shop_auth
是我的自定義身份驗證提供程序。 (我在這里提出了實現: https : //gist.github.com/bezhermoso/9305705 )
我的問題是,我不知道如何配置防火牆,以便如果用戶已經登錄到main
防火牆中,那么我的商店應該簡單地允許他進入,而不必對照現有訂單檢查其會話ID並只需創建一個新的一。
如何配置防火牆來做到這一點?
所以我看錯了方向...
我能夠在朋友的幫助下實施解決方案。 他指出,我不需要創建單獨的防火牆。 相反,只需將我的自定義身份驗證提供程序(負責將當前會話與待處理訂單進行匹配)添加到"main"
配置,並通過自定義屬性和自定義投票者控制授權:
security.yml
:
firewalls:
main:
pattern: ^/
form_login:
check_path: /user/login_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /user/home
logout:
invalidate_session: false
path: /user/logout
target: /
shop_auth: true #Ta-da!
access_controls:
- { path: /shop, [CAN_SHOP, ... ] }
不確定我是否真的解決了您的問題。 可能會有助於您知道可以設置一個鏈提供商以從多個“提供商”登錄:
providers:
chain_provider:
chain:
providers: [shop_auth, main_provider]
shop_auth:
id: service.shop_auth
main_provider:
id: fos_userbundle
firewalls:
# ...
shop:
form_login:
provider: chain_provider
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.