【问题标题】:Catchable Fatal Error: Argument 4 passed to UsernamePasswordToken::__construct() must be an array, null given可捕获的致命错误:传递给 UsernamePasswordToken::__construct() 的参数 4 必须是数组,给定 null
【发布时间】:2014-07-23 10:52:15
【问题描述】:

登录我的 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 行

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

【问题讨论】:

  • 我们需要查看您的表单并了解您是否扩展了 UserBundle 的 securityController。
  • 我没有使用过用户捆绑包。这只是一个简单的登录表单

标签: php symfony login


【解决方案1】:

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

UsernamePasswordToken::__construct() 的第四个参数应该是一个数组,但它是null。它在UserAuthenticationProvider at line 96 中调用。

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

我猜您有written your own User entity,并且您的用户实体的getRoles() 方法返回null 而不是角色数组。所以只需将该方法更改为如下所示:

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

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

【讨论】:

【解决方案2】:

我修复了这个错误,所以返回角色:

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

}

【讨论】:

    【解决方案3】:

    这个错误很明显,因为角色属性当前提供的值为 null 但是你必须给它一个角色数组,所以要解决它只需返回角色属性:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多