我在Symfony2中遇到登录和身份验证方面的问题.例外情况是"$ user必须是UserInterface的实例,实现__toString方法的对象或原始字符串".
调试我的代码我可以注意到我尝试登录我的应用程序的用户可以成功进行身份验证(app/log/dev.log),但凭据var为null:

AbstractToken中的用户变量具有来自数据库的用户数据.
我继续在ContextListener-> refreshUser函数中调试,我得到这些值:

一切都有值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)