Php “匹配路线”;“家”;令牌中的结果已取消验证

Php “匹配路线”;“家”;令牌中的结果已取消验证,php,symfony,security,Php,Symfony,Security,以下4.1文档将两个用户实体和进行混搭,尝试登录会导致以下开发人员日志条目: security.INFO: User has been authenticated successfully... security.DEBUG: Stored the security token in the session... request.INFO: Matched route "home"... security.DEBUG: Read existing security token from the

以下4.1文档将两个用户实体和进行混搭,尝试登录会导致以下开发人员日志条目:

security.INFO: User has been authenticated successfully...
security.DEBUG: Stored the security token in the session...
request.INFO: Matched route "home"...
security.DEBUG: Read existing security token from the session...
doctrine.DEBUG: SELECT t0.id AS id_1,...
security.DEBUG: Token was deauthenticated after trying to refresh it
用户实体(包括该实体)

security.yaml:

security:
    encoders:
      App\Entity\User:
        algorithm: bcrypt

    providers:
        db_provider:
            entity:
                class: App\Entity\User
                property: username

    firewalls:
        main:
            provider: db_provider
            anonymous: ~
            form_login:
                login_path: login
                check_path: login
                default_target_path: home

    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }
控制器:

public function login(Request $request, AuthenticationUtils $authenticationUtils)
{
    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();

    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('security/login.html.twig', array(
            'last_username' => $lastUsername,
            'error' => $error,
    ));
}

因此,经过长时间的讨论,确定数据库中没有设置角色。试图在构造器中设置一个构造器注定要失败,因为条令在从数据库中水合时不使用构造器

正确的解决方案是在数据库中正确存储角色。一点小技巧是做如下事情:

// User
getRoles() {
    return count($roles) ? $roles : ['ROLE_USER'];
}

如果仔细观察,问题中的addRoles方法可能有一个错误,因为它是从FOSUserBundle部分克隆的。始终是一件危险的事情。

通常,您会将user::roles设置为构造函数中的条令数组。我不确定在那种情况下这是否重要。验证数据库中的用户行是否已正确填充。也可以验证sql查询。并注释掉访问控制部分,直到一切正常。可能会在isEqualTo方法中添加一两条dump语句。我认为这可能是失败的原因,尽管我不明白为什么。谢谢你的建议。用户行被验证为良好;验证查询是否正确;isEqualTo返回true。行为与构造函数角色数组内容无关,
处于活动状态
值。在没有访问控制的情况下,登录被重定向,但用户不是。在framework.yaml中添加了显式会话参数;会话现在已创建,但为空。当然,您确实需要一个会话。实际上,我已经通过运行实际代码解决了几个类似的问题。考虑把你的安装程序放到GITHUB存储库中,我来看看。你可以找到回购协议。非常感谢。没有看到任何明显的东西。你写注册页了吗?我看到了表单,但没有看到控制器或模板。
// User
getRoles() {
    return count($roles) ? $roles : ['ROLE_USER'];
}