Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FOS/UserBundle: Unrecognized field: usernameCanonical

Tags:

php

symfony

I'm very new to Symfony 2.0 and FOS/UserBundle. I'm install it to my project and when I trying to login or register new user I get following errors:

Unrecognized field: usernameCanonical

I haven't no idea what does it mean? I'm put my codes:

app/config/security.yml file

security:
    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: /not_found
            logout: true
            anonymous: true

    access_control:
        # The WDT has to be allowed to anonymous users to avoid requiring the login with the AJAX request
        - { 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: ROLE_USER }

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPERADMIN:  ROLE_ADMIN

User entity located in SecurityBundle:

<?php

namespace App\SecurityBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;

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

    /**
     * @orm:Column(type="string", name="username", length="70")
     */
    protected $username;    

    /**
     * @orm:Column(type="string", name="password", length="70")
     */
    protected $password;    

    /**
     * @orm:Column(type="string", name="email", length="70")
     */
    protected $email;

    public function __construct()
    {
        parent::__construct();
    }
}

Please help me?

EDITED: When I trying to register new user I get below errors:

The "App\SecurityBundle\Entity\User" class metadata does not have any "usernameCanonical" field or association mapping.

Added my config.yml:

imports:
    - { resource: parameters.ini }
    - { resource: security.yml }

framework:
    secret:        %secret%
    charset:       UTF-8
    error_handler: null
    csrf_protection:
        enabled: true
    router:        { resource: "%kernel.root_dir%/config/routing.yml" }
    validation:    { enabled: true, annotations: true }
    templating:    { engines: ['twig'] } #assets_version: SomeVersionScheme
    session:
        default_locale: %locale%
        lifetime:       3600
        auto_start:     true

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

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        cssrewrite: ~
        # closure:
        #     jar: %kernel.root_dir%/java/compiler.jar
        # yui_css:
        #     jar: %kernel.root_dir%/java/yuicompressor-2.4.2.jar

fos_user:
    db_driver: orm
    firewall_name: main
    class:
        model:
            user: App\SecurityBundle\Entity\User

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        default_entity_manager: default
        entity_managers:
            default:
                mappings:
                    FOSUserBundle: ~
                    AppSecurityBundle: { type: annotation, dir: Entity/ }

# Swiftmailer Configuration
swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%

jms_security_extra:
    secure_controllers:  true
    secure_all_services: false
like image 298
Zeck Avatar asked May 14 '11 01:05

Zeck


2 Answers

In my case auto mapping doesn't work because I needed to extend entity (not model)

use FOS\UserBundle\Model\User as BaseUser;

chage to

use FOS\UserBundle\Entity\User as BaseUser;
like image 55
Alexei T Avatar answered Oct 23 '22 10:10

Alexei T


In my case, in my user class, I was using

use FOS\UserBundle\Document\User as BaseUser;

instead of

use FOS\UserBundle\Entity\User as BaseUser;
like image 27
FMaz008 Avatar answered Oct 23 '22 10:10

FMaz008