### `composer.json` ```json { "jms/serializer-bundle": "dev-master", "friendsofsymfony/user-bundle": "2.0.*@dev", "friendsofsymfony/rest-bundle": "1.4.*@dev", "friendsofsymfony/oauth-server-bundle": "1.4.*@dev", "nelmio/api-doc-bundle": "2.5.*@dev", } ``` ### `app/AppKernel.php` ```php $bundles = array( // ... new JMS\SerializerBundle\JMSSerializerBundle(), new FOS\UserBundle\FOSUserBundle(), new FOS\RestBundle\FOSRestBundle(), new FOS\OAuthServerBundle\FOSOAuthServerBundle(), new Nelmio\ApiDocBundle\NelmioApiDocBundle(), // ... ); ``` ### `app/config/config.yml` ```yml framework: # ... translator: { fallback: "%locale%" } # ... fos_user: db_driver: orm firewall_name: main user_class: test\ApiBundle\Entity\User fos_oauth_server: db_driver: orm client_class: test\ApiBundle\Entity\Client access_token_class: test\ApiBundle\Entity\AccessToken refresh_token_class: test\ApiBundle\Entity\RefreshToken auth_code_class: test\ApiBundle\Entity\AuthCode service: options: supported_scopes: read nelmio_api_doc: ~ sensio_framework_extra: view: annotations: false fos_rest: param_fetcher_listener: true body_listener: true format_listener: true view: view_response_listener: 'force' routing_loader: default_format: json access_denied_listener: json: true exception: codes: 'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404 'Doctrine\ORM\OptimisticLockException': HTTP_CONFLICT messages: 'Symfony\Component\Routing\Exception\ResourceNotFoundException': true ``` ### `app/config/routing.yml` ``` # FOSUserBundle fos_user_security: resource: "@FOSUserBundle/Resources/config/routing/security.xml" fos_user_profile: resource: "@FOSUserBundle/Resources/config/routing/profile.xml" prefix: /profile fos_user_register: resource: "@FOSUserBundle/Resources/config/routing/registration.xml" prefix: /register fos_user_resetting: resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" prefix: /resetting fos_user_change_password: resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" prefix: /profile # FOSAuthServerBundle fos_oauth_server_token: resource: "@FOSOAuthServerBundle/Resources/config/routing/token.xml" fos_oauth_server_authorize: resource: "@FOSOAuthServerBundle/Resources/config/routing/authorize.xml" # testApiBundle test_api_bundle: type: rest resource: "@testApiBundle/Resources/config/routing.yml" prefix: / ``` ### `app/config/security.yml` Please remember we've put a `context` name at `test_connect`, we'll use it soon ! ```yml security: encoders: vp\GlobalBundle\Entity\User: algorithm: pbkdf2 hash_algorithm: sha512 encode_as_base64: true iterations: 1000 role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: user_provider: id: vp_global_user_provider firewalls: oauth_token: pattern: ^/oauth/v2/token security: false oauth_authorize: pattern: ^/oauth/v2/auth form_login: provider: user_provider check_path: vp_global_login_check login_path: vp_global_login anonymous: true context: test_connect api: pattern: ^/ fos_oauth: true stateless: true anonymous: true # Needed to allow access to oauth pages access_control: - { path: ^/oauth/v2/, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/, roles: IS_AUTHENTICATED_FULLY } ```