Skip to content

Bug: Registration doesn't work: "$user->id is null. You should not use the incomplete User object." #654

@iamsyh

Description

@iamsyh

PHP Version

8.1

CodeIgniter4 Version

4.3.2

Shield Version

latest dev branch c561109

Which operating systems have you tested for this bug?

Linux

Which server did you use?

apache

Database

MySQL

Did you customize Shield?

No

What happened?

When you try to register via the default registration form, an error occurs:

CRITICAL - 2023-03-02 18:35:46 --> "$user->id" is null. You should not use the incomplete User object.
in /home/mydir/vendor/codeigniter4/shield/src/Models/UserIdentityModel.php on line 85.
1 /home/mydir/vendor/codeigniter4/shield/src/Models/UserIdentityModel.php(235): CodeIgniter\Shield\Models\UserIdentityModel->checkUserId(Object(CodeIgniter\Shield\Entities\User))
2 /home/mydir/vendor/codeigniter4/shield/src/Entities/User.php(87): CodeIgniter\Shield\Models\UserIdentityModel->getIdentities(Object(CodeIgniter\Shield\Entities\User))
3 /home/mydir/vendor/codeigniter4/shield/src/Entities/User.php(101): CodeIgniter\Shield\Entities\User->populateIdentities()
4 /home/mydir/vendor/codeigniter4/shield/src/Entities/User.php(72): CodeIgniter\Shield\Entities\User->getIdentities('email_password')
5 /home/mydir/vendor/codeigniter4/shield/src/Entities/User.php(140): CodeIgniter\Shield\Entities\User->getIdentity('email_password')
6 /home/mydir/vendor/codeigniter4/shield/src/Entities/User.php(220): CodeIgniter\Shield\Entities\User->getEmailIdentity()
7 SYSTEMPATH/Entity/Entity.php(493): CodeIgniter\Shield\Entities\User->getEmail()
8 /home/mydir/vendor/codeigniter4/shield/src/Authentication/Passwords/NothingPersonalValidator.php(58): CodeIgniter\Entity\Entity->__get('email')
9 /home/mydir/vendor/codeigniter4/shield/src/Authentication/Passwords/NothingPersonalValidator.php(27): CodeIgniter\Shield\Authentication\Passwords\NothingPersonalValidator->isNotPersonal('nh8tve37abhcfux', Object(CodeIgniter\Shield\Entities\User))
10 /home/mydir/vendor/codeigniter4/shield/src/Authentication/Passwords.php(103): CodeIgniter\Shield\Authentication\Passwords\NothingPersonalValidator->check('nh
8tve37abhcfux', Object(CodeIgniter\Shield\Entities\User))
11 /home/mydir/vendor/codeigniter4/shield/src/Authentication/Passwords/ValidationRules.php(45): CodeIgniter\Shield\Authentication\Passwords->check('nH8tve37abHCfUX', Object(CodeIgniter\Shield\Entities\User))
12 SYSTEMPATH/Validation/Validation.php(311): CodeIgniter\Shield\Authentication\Passwords\ValidationRules->strong_password('nH
8tve37abHCfUX', null)
13 SYSTEMPATH/Validation/Validation.php(170): CodeIgniter\Validation\Validation->processRules('password', 'Auth.password', 'nH*8tve37abHCfUX', [...], [...])
14 SYSTEMPATH/Controller.php(140): CodeIgniter\Validation\Validation->run()
15 /home/mydir/vendor/codeigniter4/shield/src/Controllers/RegisterController.php(102): CodeIgniter\Controller->validate([...])
16 SYSTEMPATH/CodeIgniter.php(934): CodeIgniter\Shield\Controllers\RegisterController->registerAction()
17 SYSTEMPATH/CodeIgniter.php(499): CodeIgniter\CodeIgniter->runController(Object(CodeIgniter\Shield\Controllers\RegisterController))
18 SYSTEMPATH/CodeIgniter.php(368): CodeIgniter\CodeIgniter->handleRequest(null, Object(Config\Cache), false)
19 FCPATH/index.php(67): CodeIgniter\CodeIgniter->run()

Steps to Reproduce

  1. Comment out email from $validFields array in Config/Auth.php
  2. Keep/Add NothingPersonalValidator to $passwordValidators in the same file
  3. Try to register as a new user

Expected Output

The registration to be completed successfully.

Anything else?

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinggood first issueGood for newcomers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions