2014-01-16 57 views
0

我期待在即将推出的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" 
    } 
} 

在此先感谢!

回答

1

我之前实现这个的方式是使用一个Invitation实体。

  1. 生成一个邀请码,并通过电子邮件发送给用户一个链接寄存器形式
  2. 只接受登记,其中包括有效的邀请码

你需要extend the registration form with the new invitation fieldregistration controller action

基本上阅读此:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/adding_invitation_registration.md

:)

TLDR;不要担心第一次登录并使用邀请系统。

+0

这是我通常会用到的方法,但正如我在问题中所说的,我不想在输入测试代码时创建用户;我只想授予客户对该网站的访问权限(如果他们愿意,他们可以在那里注册)。我已经尝试过使用客户端会话来做这件事,并使用allow_if选项进行检查,但由于某种原因它引发了一个错误。你有什么想法,或者使用allow_if来实现相同的结果吗? – patrogizmo

+0

在这种情况下,为什么不只是在服务器上使用基本的http认证。链接到apache文档:http://httpd.apache.org/docs/2.4/howto/auth.html –