4
votes

I have problem with SonataBundle. I have error "Catchable Fatal Error: Argument 1 passed to Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider::__construct() must implement interface Symfony\Component\Security\Core\User\UserProviderInterface, instance of FOS\UserBundle\Doctrine\UserManager given, called in C:\xampp\htdocs\PizzaProject\var\cache\dev\appDevDebugProjectContainer.php on line 6047 and defined"

This is my config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
    - { resource: "@PizzaBundle/Resources/config/services.yml" }
    - { resource: "@PizzaBundle/Resources/config/admin.yml" }

# Put parameters here that don't need to change on each machine where the app is deployed
# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: en

framework:
    #esi: ~
    translator: { fallbacks: ['%locale%'] }
    secret: '%secret%'
    router:
        resource: '%kernel.root_dir%/config/routing.yml'
        strict_requirements: ~
    form: ~
    csrf_protection: ~
    validation: { enable_annotations: true }
    #serializer: { enable_annotations: true }
    templating:
        engines: ['twig']
    default_locale: '%locale%'
    trusted_hosts: ~
    trusted_proxies: ~
    session:
        # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
        handler_id:  session.handler.native_file
        save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"
    fragments: ~
    http_method_override: true
    assets: ~
    php_errors:
        log: true

# Twig Configuration
twig:
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'

# Doctrine Configuration
doctrine:
    dbal:
        driver: pdo_mysql
        host: '%database_host%'
        port: '%database_port%'
        dbname: '%database_name%'
        user: '%database_user%'
        password: '%database_password%'
        charset: UTF8
        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: "%kernel.root_dir%/../var/data/data.sqlite"
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #path: '%database_path%'

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

# Swiftmailer Configuration
swiftmailer:
    transport: '%mailer_transport%'
    host: '%mailer_host%'
    username: '%mailer_user%'
    password: '%mailer_password%'
    spool: { type: memory }

sonata_block:
    default_contexts: [cms]
    blocks:

        # enable the SonataAdminBundle block
        sonata.admin.block.admin_list:
            contexts:   [admin]

fos_user:
   db_driver: orm
   firewall_name: main
   user_class: PizzaBundle\Entity\User
   from_email:
        address: [email protected]
        sender_name: You

sonata_block:
  default_contexts: [cms]
  blocks:


  # enable the SonataAdminBundle block
  sonata.admin.block.admin_list:
  contexts: [admin]

sonata_admin:
    security:
        handler: sonata.admin.security.handler.acl

        # acl security information
        information:
            GUEST:    [VIEW, LIST]
            STAFF:    [EDIT, LIST, CREATE]
            EDITOR:   [OPERATOR, EXPORT]
            ADMIN:    [MASTER]

        # permissions not related to an object instance and also to be available when objects do not exist
        # the DELETE admin permission means the user is allowed to batch delete objects
        admin_permissions: [CREATE, LIST, DELETE, UNDELETE, EXPORT, OPERATOR, MASTER]

        # permission related to the objects
        object_permissions: [VIEW, EDIT, DELETE, UNDELETE, OPERATOR, MASTER, OWNER]

Security.yml

security:

    # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
    role_hierarchy:
       ROLE_SONATA_FOO_READER:
           - ROLE_SONATA_ADMIN_DEMO_FOO_LIST
           - ROLE_SONATA_ADMIN_DEMO_FOO_VIEW
       ROLE_SONATA_FOO_EDITOR: 
           - ROLE_SONATA_ADMIN_DEMO_FOO_CREATE
           - ROLE_SONATA_ADMIN_DEMO_FOO_EDIT
       ROLE_SONATA_FOO_ADMIN:
           - ROLE_SONATA_ADMIN_DEMO_FOO_DELETE
           - ROLE_SONATA_ADMIN_DEMO_FOO_EXPORT

       ROLE_STAFF:             [ROLE_USER, ROLE_SONATA_FOO_READER]
       ROLE_ADMIN:             [ROLE_STAFF, ROLE_SONATA_FOO_EDITOR, ROLE_SONATA_FOO_ADMIN]
       ROLE_SUPER_ADMIN:       [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

       ROLE_ALL_ADMIN:         [ROLE_STAFF, ROLE_SONATA_FOO_ALL]

    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    providers:
        fos_userbundle:
           id: fos_user.user_manager

    firewalls:
        main:
           pattern: ^/
           form-login:
                provider:       fos_userbundle
                login_path:     /login
                use_forward:    false
                check_path:     /login_check
                failure_path:   null
           logout: true
           anonymous: true
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
            # activate different ways to authenticate

            # http://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
            #http_basic: ~

            # http://symfony.com/doc/current/cookbook/security/form_login_setup.html
            #form_login: ~
    access_control:
       - { path: ^/wdt/, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY }

        # AsseticBundle paths used when using the controller for assets
       - { path: ^/js/, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/css/, role: IS_AUTHENTICATED_ANONYMOUSLY }

        # URL of FOSUserBundle which need to be available to anonymous users
       - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } # for the case of a failed login
       - { path: ^/user/new$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/check-confirmation-email$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/confirm/, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/confirmed$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/request-reset-password$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/send-resetting-email$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/check-resetting-email$, role: IS_AUTHENTICATED_ANONYMOUSLY }
       - { path: ^/user/reset-password/, role: IS_AUTHENTICATED_ANONYMOUSLY }

        # Secured part of the site
        # This config requires being logged for the whole site and having the admin role for the admin part.
        # Change these rules to adapt them to your needs
       - { path: ^/admin/, role: ROLE_ADMIN }
       - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }

    role_hierarchy:
        ROLE_ADMIN:       [ROLE_USER, ROLE_SONATA_ADMIN]
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    access_decision_manager:
        strategy: unanimous
    acl:
        connection: default

services.yml

parameters:
    security.acl.permission.map:
      class: Sonata\AdminBundle\Security\Acl\Permission\AdminPermissionMap

routing.yml

pizza:
    resource: "@PizzaBundle/Controller/"
    type:     annotation
    prefix:   /

admin:
  resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
  prefix: /admin

_sonata_admin:
  resource: .
  type: sonata_admin
  prefix: /admin

fos_user:
   resource: "@FOSUserBundle/Resources/config/routing/all.xml"
   prefix: /

My entity

<?php


namespace PizzaBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;


/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}
1
I find error in my code. I must change providers: fos_userbundle: id: fos_user.user_manager On: providers: fos_userbundle: id: fos_user.user_provider.usernameJakub W

1 Answers

3
votes

you try login with FOSUserBundle and FOSOAuthServerBundle So you use the default oAuth api as the default user provider, and you try to use the grant_type password (sending the user credentials in the parameters) an authentication error message is returned because your username parameter is the email/login of the user. This problem can be easily solved changing the user provider property in your security.yml file (and config.yml if you use FOSOAuthServerBundle Change In your services.yml)

id: fos_user.user_manager to thes fos_user.user_provider.username

security:
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username