I am getting the following error when logging in into my Symfony application (with correct username and password):
ContextErrorException: Catchable Fatal Error: Argument 4 passed to Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() must be an array, null given, called in D:\xampp\htdocs\essweb\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php on line 96 and defined in D:\xampp\htdocs\essweb\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken.php line 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: /
Updated:
Login form:
<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>
Best Answer
Basically, what the error message says is:
The 4th argument for
UsernamePasswordToken::__construct()
should be an array, but it'snull
. It was called inUserAuthenticationProvider
at line 96.If you take a look at that code, you'll see that the 4th argument for
UsernamePasswordToken::__construct()
is$roles
. So that should be an array, but it's gettingnull
instead.I'm guessing that you have written your own User entity, and that the
getRoles()
method of your user entity is returningnull
instead of an array of roles. So just change that method to something like this:Of course, the actual code may differ (you might want to store the user roles in the database), as long as
getRoles()
returns an array of strings or Role objects.