可捕获的致命错误:传递给 UsernamePasswordToken::__construct() 的参数 4 必须是一个数组,给定 null

2023-11-21

登录我的 Symfony 应用程序(使用正确的用户名和密码)时出现以下错误:

ContextErrorException:可捕获的致命错误:传递给 Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() 的参数 4 必须是一个数组,给定 null,在 D:\xampp\htdocs\essweb\vendor\symfony 中调用\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php 第 96 行,并在 D:\xampp\htdocs\essweb\vendor\symfony\symfony\src\Symfony\Component\Security\Core 中定义\Authentication\Token\UsernamePasswordToken.php 第 36 行

安全.yml

firewalls:
        admin_area:
            pattern:    ^/
            anonymous: ~
            form_login:
                login_path:  /
                check_path:  /login_check
                default_target_path: /user
                failure_path: /
                #username_parameter: username
                #password_parameter: password
                remember_me: true

            remember_me:
                key: "%secret%"
                lifetime: 31536000
                path: /
                domain: ~
                always_remember_me: true
            logout:
                path:   /logout
                target: /  

Updated:

登录表单:

<form class="form-signin form-group" action="{{ path('login_check') }}" method="post">
Username: <input type="text" class="form-control" name="_username" placeholder="Username" value="{{ last_username }}" required="required">
Password: <input type="text" class="form-control" name="_password" placeholder="" value="{{ last_username }}" required="required">
<button class="btn btn-sm btn-primary btn-block" type="submit">Sign in</button>

基本上,错误消息的内容是:

第 4 个参数为UsernamePasswordToken::__construct()应该是一个数组,但它是null。它被称为UserAuthenticationProvider在第 96 行.

如果您查看该代码,您会看到第四个参数UsernamePasswordToken::__construct() is $roles。所以这应该是一个数组,但它越来越null反而。

我猜你有编写您自己的 User 实体,并且getRoles()您的用户实体的方法正在返回null而不是一系列角色。所以只需将该方法更改为如下所示:

/**
 * Returns the roles granted to the user.
 * 
 * @return Role[] The user roles
 */
public function getRoles()
{
    return array('ROLE_USER');
}

当然,实际的代码可能会有所不同(您可能希望将用户角色存储在数据库中),只要getRoles()返回一个字符串数组或Role对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可捕获的致命错误:传递给 UsernamePasswordToken::__construct() 的参数 4 必须是一个数组,给定 null 的相关文章

随机推荐