【发布时间】:2014-03-02 12:18:54
【问题描述】:
情况如下:
我目前有两个现有的防火墙——即main 和admin。不知何故,我需要为我的购物部分添加第三个防火墙。
我的店铺基本有这些步骤:
Select subscription -> user creation/login -> Capture billing information -> Review purchase -> Capture payment
新要求是,如果用户尚未登录,我需要捕获用户信息和帐单地址但不将其存储在用户存储库中——客户的论点是这将停止从将电子邮件地址锁定到可能没有完成整个购买流程的帐户,从而防止用户在将来决定继续使用该电子邮件地址。
这是我想到的身份验证流程:
- 我创建了一个名为
shop的新防火墙。 - 当用户未登录时,我将他重定向到
shop/account/create。此步骤将在系统中创建一个新订单,标记为initiated。 此订单将包含所提供的用户信息以及会话 ID。 不会创建实际的用户帐户。 - 自定义身份验证提供程序将检查会话 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并创建一个新的。
如何配置我的防火墙来执行此操作?
【问题讨论】:
标签: php symfony authentication