From f432c3fc5dd4500b1bbdd1421bb51adae21c70b6 Mon Sep 17 00:00:00 2001 From: kenjis Date: Wed, 3 Aug 2022 17:22:56 +0900 Subject: [PATCH 1/4] fix: set property cast for User::$id User::$id should be 1, not '1'. --- src/Entities/User.php | 1 + src/Models/UserModel.php | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Entities/User.php b/src/Entities/User.php index 605164959..f8140ebbf 100644 --- a/src/Entities/User.php +++ b/src/Entities/User.php @@ -40,6 +40,7 @@ class User extends Entity * @var array */ protected $casts = [ + 'id' => 'integer', 'active' => 'boolean', 'permissions' => 'array', 'groups' => 'array', diff --git a/src/Models/UserModel.php b/src/Models/UserModel.php index d1ae44432..8b27b5e4d 100644 --- a/src/Models/UserModel.php +++ b/src/Models/UserModel.php @@ -298,7 +298,9 @@ protected function saveEmailIdentity(array $data): array } // Insert - if ($this->tempUser->id === null) { + // If we use Entity Property Casting ['id' => 'integer'], + // `id` returns 0 when not set. + if ($this->tempUser->id === null || $this->tempUser->id === 0) { /** @var User $user */ $user = $this->find($this->db->insertID()); From 3e25eccc8630ba1b9ff9f36733f9d6269bde09f3 Mon Sep 17 00:00:00 2001 From: kenjis Date: Wed, 3 Aug 2022 17:24:37 +0900 Subject: [PATCH 2/4] test: fix failed test with MySQL --- src/Models/RememberModel.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Models/RememberModel.php b/src/Models/RememberModel.php index f28c58112..dd6c4cc7f 100644 --- a/src/Models/RememberModel.php +++ b/src/Models/RememberModel.php @@ -2,9 +2,11 @@ namespace CodeIgniter\Shield\Models; +use CodeIgniter\I18n\Time; use CodeIgniter\Model; use CodeIgniter\Shield\Entities\User; use DateTime; +use Faker\Generator; use stdClass; class RememberModel extends Model @@ -23,6 +25,16 @@ class RememberModel extends Model ]; protected $useTimestamps = true; + public function fake(Generator &$faker): stdClass + { + return (object) [ + 'user_id' => fake(UserModel::class)->id, + 'selector' => 'selector', + 'hashedValidator' => 'validator', + 'expires' => Time::parse('+1 day')->format('Y-m-d H:i:s'), + ]; + } + /** * Stores a remember-me token for the user. */ From f1894c9993870098201523c92681ac269b0d7579 Mon Sep 17 00:00:00 2001 From: kenjis Date: Thu, 4 Aug 2022 07:04:52 +0900 Subject: [PATCH 3/4] fix: make User::$id nullable --- src/Entities/User.php | 2 +- src/Models/UserModel.php | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Entities/User.php b/src/Entities/User.php index f8140ebbf..6949ef1a8 100644 --- a/src/Entities/User.php +++ b/src/Entities/User.php @@ -40,7 +40,7 @@ class User extends Entity * @var array */ protected $casts = [ - 'id' => 'integer', + 'id' => '?integer', 'active' => 'boolean', 'permissions' => 'array', 'groups' => 'array', diff --git a/src/Models/UserModel.php b/src/Models/UserModel.php index 8b27b5e4d..d1ae44432 100644 --- a/src/Models/UserModel.php +++ b/src/Models/UserModel.php @@ -298,9 +298,7 @@ protected function saveEmailIdentity(array $data): array } // Insert - // If we use Entity Property Casting ['id' => 'integer'], - // `id` returns 0 when not set. - if ($this->tempUser->id === null || $this->tempUser->id === 0) { + if ($this->tempUser->id === null) { /** @var User $user */ $user = $this->find($this->db->insertID()); From 7edbcd4196427d576bd843dcf9a755a4bcc4ec83 Mon Sep 17 00:00:00 2001 From: kenjis Date: Thu, 4 Aug 2022 07:05:30 +0900 Subject: [PATCH 4/4] fix: don't create a User in fake() We don't need a user recored for the current SessionAuthenticatorTest. --- src/Models/RememberModel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Models/RememberModel.php b/src/Models/RememberModel.php index dd6c4cc7f..85c3e1037 100644 --- a/src/Models/RememberModel.php +++ b/src/Models/RememberModel.php @@ -28,7 +28,7 @@ class RememberModel extends Model public function fake(Generator &$faker): stdClass { return (object) [ - 'user_id' => fake(UserModel::class)->id, + 'user_id' => 1, 'selector' => 'selector', 'hashedValidator' => 'validator', 'expires' => Time::parse('+1 day')->format('Y-m-d H:i:s'),