小编Víc*_*r M的帖子

Symfony2 $ user必须是UserInterface的实例

我在Symfony2中遇到登录和身份验证方面的问题.例外情况是"$ user必须是UserInterface的实例,实现__toString方法的对象或原始字符串".

调试我的代码我可以注意到我尝试登录我的应用程序的用户可以成功进行身份验证(app/log/dev.log),但凭据var为null:

调试

AbstractToken中的用户变量具有来自数据库的用户数据.

我继续在ContextListener-> refreshUser函数中调试,我得到这些值:

Debugging2

一切都有值null并且在Symfony\Bridge\Doctrine\Security\User\EntityUserProvider-> refreshUser函数返回变量$ refreshedUser为null,因此当ContextListener类上的函数$ token-> setUser($ refreshedUser)失败时抛出异常.

我写下我的security.yml和我正在使用的实体:

security.yml:

security:
    encoders:
        Pladuch\BackBundle\Entity\BaseUser:
            algorithm: sha512
            encode_as_base64: false
            iterations: 1

    providers:
        sga:
            entity: { class: 'PladuchBackBundle:Usuario', property: username }

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

        sga:
            pattern: ^/gestion
            anonymous: ~
            form_login:
                login_path: pladuch_login_sga
                check_path: pladuch_login_check
                default_target_path: pladuch_sga_index
                csrf_provider: form.csrf_provider
                provider: sga
            logout:
                path: pladuch_logout_sga
                target: pladuch_login_sga

    access_control:
        - { path: ^/gestion/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/gestion, roles: ROLE_ADMIN }
Run Code Online (Sandbox Code Playgroud)

抽象类BaseUser:

<?php

namespace Pladuch\BackBundle\Entity;


use Symfony\Component\Security\Core\User\AdvancedUserInterface; …
Run Code Online (Sandbox Code Playgroud)

symfony symfony-2.5

4
推荐指数
1
解决办法
3278
查看次数

标签 统计

symfony ×1

symfony-2.5 ×1