Php “匹配路线”;“家”;令牌中的结果已取消验证
以下4.1文档将两个用户实体和进行混搭,尝试登录会导致以下开发人员日志条目: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
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'];
}