我期待在即将推出的symfony网站上设置一个私人测试版。我有一个邀请人员的电子邮件地址列表,用于检查服务器上的文本文件,并且我希望在他们尝试访问未经许可的网站时向他们提供html表单。一旦有人输入了他们的电子邮件地址,它应该将其重定向到主页。棘手的部分是过去我使用的是FOSUserBundle,整个帐户登录系统已经就位。我应该如何处理这个问题?用他们的电子邮件登录的人还没有帐户,所以我不能只是像他们的用户文档中添加INVITE_USER这样的角色,所以我正在考虑尝试将他们的状态存储在他们的会话中,并检查使用symfony的2.4的allow_if表情,但我得到一个错误:Symfony Private Beta登录
Fatal error: Uncaught exception 'Symfony\Component\Config\Definition\Exception\InvalidConfigurationException' with message 'Unrecognized options "allow_if" under "security.access_control.17"' in C:\wamp\www\vendor\symfony\symfony\src\Symfony\Component\Config\Definition\ArrayNode.php on line 306
我security.yml文件看起来像这样:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
beta:
pattern: ^/
anonymous: ~
form_login:
login_path: /beta
check_path: /beta_invite_check
always_use_default_target_path: true
default_target_path:/
logout:
path: /logout
target:/
main:
pattern: ^/
form_login:
check_path: /login_check
provider: fos_userbundle
always_use_default_target_path: false
default_target_path: /profile
use_referer: true
success_handler: security.authentication.handler
logout:
path: /logout
target:/
invalidate_session: false
anonymous: ~
login:
pattern: ^/login$
security: false
access_control:
- { path: ^/beta, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/account, roles: ROLE_USER}
- { path: /_wdt/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_profiler/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, role: ROLE_USER }
- { path: ^/submit, role: ROLE_USER }
- { path: ^/submissions, role: ROLE_USER }
- { path: ^/uploadCredits, role: ROLE_USER }
- { path: ^/transactions, role: ROLE_USER }
- { path: ^/activity, role: ROLE_USER }
- { path: ^/browse/join, role: ROLE_USER }
- { path: ^/browse/follow, role: ROLE_USER }
- { path: ^/browse/unfollow, role: ROLE_USER }
- { path: ^/player/rating, role: ROLE_USER }
- { path: ^/, allow_if: "'BETA_ALLOWED' == request.getSession().beta" }
有谁知道为什么发生这种情况? allow_if似乎是一个新功能,所以也许有人的软件包不能很好地使用它?这里是我的composer.json文件,以防万一:
{
"name": "symfony/framework-standard-edition",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
"psr-0": { "": "src/" }
},
"require": {
"doctrine/mongodb-odm": "1.0.*@dev",
"doctrine/mongodb-odm-bundle": "3.0.*@dev",
"php": ">=5.3.3",
"symfony/symfony": "2.4.1",
"doctrine/orm": "~2.2,>=2.2.3",
"doctrine/doctrine-bundle": "1.2.*",
"twig/extensions": "1.0.*",
"symfony/assetic-bundle": "2.1.*",
"hipaway-travel/mandrill-bundle": "dev-master",
"symfony/monolog-bundle": "2.2.*",
"sensio/distribution-bundle": "2.2.*",
"sensio/framework-extra-bundle": "2.2.*",
"sensio/generator-bundle": "2.2.*",
"jms/security-extra-bundle": "dev-master",
"friendsofsymfony/user-bundle": "~2.0.*@dev",
"jms/di-extra-bundle": "dev-master",
"sonata-project/media-bundle": "2.2.*@dev",
"sonata-project/admin-bundle": "2.2.*@dev",
"sonata-project/core-bundle": "2.2.*@dev",
"sonata-project/doctrine-mongodb-admin-bundle": "2.2.*@dev",
"avalanche123/imagine-bundle": "v2.1",
"braintree/braintree_php" : "dev-master",
"cometcult/braintree-bundle": "dev-master",
"paypal/rest-api-sdk-php": "dev-master",
"kmj/paypalbridgebundle": "dev-master",
"hwi/oauth-bundle": "0.3.*@dev",
"cboden/Ratchet": "0.3.0",
"react/zmq": "0.2.*"
},
"scripts": {
"post-install-cmd": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
],
"post-update-cmd": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
]
},
"config": {
"bin-dir": "bin"
},
"minimum-stability": "dev",
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web"
}
}
在此先感谢!
这是我通常会用到的方法,但正如我在问题中所说的,我不想在输入测试代码时创建用户;我只想授予客户对该网站的访问权限(如果他们愿意,他们可以在那里注册)。我已经尝试过使用客户端会话来做这件事,并使用allow_if选项进行检查,但由于某种原因它引发了一个错误。你有什么想法,或者使用allow_if来实现相同的结果吗? – patrogizmo
在这种情况下,为什么不只是在服务器上使用基本的http认证。链接到apache文档:http://httpd.apache.org/docs/2.4/howto/auth.html –