Symfony2 Doctrine在SQL中使用了错误的别名,登录失败并显示“无法处理身份验证请求[...]”

时间:2016-09-22 12:34:35

标签: symfony authentication doctrine

我正在尝试创建自己的用户捆绑包,目前正在登录阶段苦苦挣扎,并显示错误消息:

  

由于系统问题,无法处理身份验证请求。

我是Symfony的新手,我正尽力学习尽可能多的方面,所以如果我在定义内容时走错了路,请原谅我。

结构

我目前有2个捆绑包,一个用于我的应用程序,名为ScoreboardBundle,另一个专用于名为Pulsahr \ UserBundle的身份验证机制。我打算在我的另一个项目中重新使用这个包 我想使用的用户实体是ScoreboardBundle \ Entity \ User,并继承自Pulsahr \ UserBundle \ Entity \ User,它实现UserInterface,\ Serializable。

记录信息

我查看了dev.log,发现了这条有趣的线:
[2016-09-22 14:16:19] security.INFO:身份验证请求失败。 {“exception”:“[object](Symfony \ Component \ Security \ Core \ Exception \ AuthenticationServiceException(code:0):执行'SELECT t1.id AS id_2,t1.username AS username_3,t1.password AS时发生异常password_4,t1.roles AS roles_5,t1.email AS email_6,t1.config AS config_7,t1.name AS name_8,t1.avatar AS avatar_9,t1.graph_color AS graph_color_10 FROM user t1 WHERE t0.username =?LIMIT 1'with params [\“fdsfgsd \”]

我可能在某个地方犯了一个错误,Doctrine正在寻找一个t0.username而没有定义t0别名。那是为什么?

以下是我的几个文件,希望它会有所帮助 /src/Pulsahr/UserBundle/Resources/config/doctrine/User.orm.yml:

ScoreboardBundle\Entity\User:
type: entity
table: user
repositoryClass: ScoreboardBundle\Repository\UserRepository
fields:
    email:
        type: string
        length: 255
    config:
        type: integer
    name:
        type: string
        length: 127
    avatar:
        type: string
        length: 255
        nullable: true
    graphColor:
        column: graph_color
        type: string
        length: 255


manyToMany:
    races:
        targetEntity: Race
        mappedBy: users

oneToMany:
    scores:
        targetEntity: Score
        mappedBy: user
lifecycleCallbacks: { }

/src/ScoreboardBundle/Resources/config/doctrine/User.orm.yml:

security:
encoders:
    ScoreboardBundle\User:
        algorithm: bcrypt
        cost: 4

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

providers:
    pulsahr_userbundle:
        entity:
            class:    ScoreboardBundle:User
            property: username

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    pulsahr_user_security:
        anonymous: true
        form_login:
            login_path: pulsahr_user_login
            check_path: pulsahr_user_check
        provider:  pulsahr_userbundle
        logout:
            path: pulsahr_user_logout
            target: pulsahr_user_login
        pattern: ^/
        remember_me:
            secret: '%secret%'
access_control:
    - { path: ^/admin, role: ROLE_ADMIN }

/app/config/security.yml:

{{1}}

我必须手动输入用户,并使用bcrypt calculator作为密码,使用4作为成本,与security.yml中定义的相同。但无论使用何种登录名和密码,我都会收到相同的错误消息。

1 个答案:

答案 0 :(得分:1)

经过多次挣扎,一位朋友帮我找到了解决方案 问题是由Pulsahr \ UserBundle \ Entity \ User上的ScoreboardBundle \ User \ Entity \ User继承引起的。
php类很好,问题来自映射。我必须在User.orm.yaml中指定原始类是一个类型" mappedSuperclass"。只做这个:

Pulsahr\UserBundle\Entity\User:
type: mappedSuperclass
table: user
[...]

有关Doctrine文档的更多信息:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
我希望这能帮助一些像我一样的人。