当前位置: 首页 > 知识库问答 >
问题:

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

施凡
2023-03-14

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

ContextErrorException:可捕获的致命错误:传递给Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken的参数4:\uu construct()必须是在D:\xampp\htdocs\essweb\vendor\Symfony\Symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider\UserAuthenticationProvider中调用的给定为null的数组。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: /  

更新日期:

登录表单:

<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>

共有3个答案

宁兴修
2023-03-14

捕获此错误是因为角色属性当前提供的值为null,但您必须为其提供一个角色数组,因此要解决此问题,只需返回角色属性:

public function getRoles()
{
    return $this->roles;
}
司寇照
2023-03-14

我修复了此错误,以便返回角色:

public function getRoles()
{
    return $this->roles->toArray();

}
欧阳斌
2023-03-14

基本上,错误消息说的是:

UsernamePasswordToken::\u construct()的第四个参数应该是一个数组,但它是null。在第96行的UserAuthenticationProvider中调用了它。

如果您查看该代码,您会发现UsernamePasswordToken::__construct()的第4个参数是$角色。所以这应该是一个数组,但它得到了null

我猜您已经编写了自己的用户实体,并且您的用户实体的方法返回的是null,而不是角色数组。因此,只需将该方法更改为以下内容:

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

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

 类似资料:
  • 我在laravel上有一个注册和登录系统,没有电子邮件验证。今天,我想使用以下指南添加电子邮件验证:https://mailtrap.io/blog/laravel-email-verification/完成所有操作后,我尝试注册一个用户,但出现了错误“传递到App\Http\Controllers\Auth\RegisterController::validator()的参数1必须是在第32行的

  • 传递给Illumate\Auth\EloquentUserProvider的参数1::validateCreentials()必须是Illumate\合同\Auth\身份验证的实例,应用程序\模型\用户给定的实例,在D:\xampp\htdocs\后端\电子商务\供应商\laravel\框架\src\Illumate\Auth\SessionG中uard.php第384行----我有这个问题请帮我

  • 问题内容: 我只是从Groovy开始。我在任何地方都找不到如何处理Groovy脚本参数的示例,因此我自己修改了此方法。必须有更好的方法来做到这一点?如果是这样,我正在寻找这种更好的方法,因为我可能忽略了显而易见的方法。 问题答案: 如果您想要的不仅仅是进阶参数解析,还可以使用Groovy CliBuilder来帮助您。它可以帮助您使用命令行标志,可选参数和打印用法说明。 签出CliBuilder的

  • 如果你需要在命令行下插入一个值,通常需要使用引号将其括起来,尤其是当其包含空格时更是如此。 shellquote 函数可以携带任意数量的参数(包括数组), 它会使用引号将每个参数都括起来并返回一个可以传递到 Shell 命令行上的以空格间隔的字符串。 在下面的例子中,我们想要创建一个用于文件改名的 exec 资源, 然而源文件名和目标文件名都包含空格,因此在命令行上需要正确地使用引号将它们括起来。

  • 我使用的是Laravel5.2。 我在表中添加了一个名为的新字段,并将其包含在视图和 我还做了一个检查,看看用户是否将使用一个保留的slug作为他的用户名,如果是,我抛出一个错误,如果用户名是好的,我保存在数据库中。 我正在检查2个保留的段塞和-这就是我保留的全部。 如果我取消检查,数据将正常保存在数据库中,包括保留的slug。所以我必须做检查。 然而,当我应用检查时,我得到了这个错误 Sessi

  • 我不知道为什么我会得到这个。我用这个代码显示专辑封面。大多数专辑/子专辑都运行良好。但其中有2个会抛出错误:致命错误[0]:array_key_exists()期望参数2为数组,给定为null 任何指点都将受到高度赞赏。谢谢.