Чтобы изменить поле электронной почты на имя пользователя в CodeIgniter 4 Shield, вы можете использовать несколько методов. Вот несколько примеров:
Метод 1: расширение модели аутентификации Shield
-
Создайте новый файл с именем
MyAuthModel.phpв каталогеApp\Models. -
Вставьте следующий код в файл
MyAuthModel.php:
<?php namespace App\Models;
use CodeIgniter\Model;
use Myth\Auth\Models\UserModel;
class MyAuthModel extends UserModel {
protected $table = 'users';
protected $allowedFields = [
'username', 'email', 'password_hash', 'reset_hash', 'reset_at', 'reset_expires', 'activate_hash',
'status', 'status_message', 'active', 'force_pass_reset',
'created_at', 'updated_at', 'deleted_at',
];
// Override the findByEmail method to search for username instead
public function findByEmail(string $email)
{
return $this->where('username', $email)->first();
}
}
-
В вашем
AuthController.phpили любом другом соответствующем контроллере заменитеuse Myth\Auth\Controllers\AuthController;наuse App\Controllers \AuthController;. -
В файле
AuthController.phpобновите строкуprotected $modelName = UserModel::class;наprotected $modelName = MyAuthModel:: класс;. -
Сохраните изменения и протестируйте приложение.
Метод 2: собственное правило проверки
-
Создайте новый файл с именем
EmailToUsernameRule.phpв каталогеApp\Validations\Rules. -
Вставьте следующий код в файл
EmailToUsernameRule.php:
<?php namespace App\Validations\Rules;
use App\Models\UserModel;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Config\Services;
use Myth\Auth\Authentication\LocalAuthenticator;
use Myth\Auth\Entities\User;
use Myth\Auth\Models\UserModel as MythUserModel;
class EmailToUsernameRule
{
/
* Check if email exists as a username in the database.
*
* @param string $str
* @param string|null $fields
* @param array<string, mixed> $data
* @param string $_
*
* @return bool
*/
public function validate(string $str, string $fields = null, array $data = [], string &$_ = null): bool
{
$db = db_connect();
$userModel = new UserModel($db, config('Auth'), new LocalAuthenticator(), new User());
$user = $userModel->where('username', $str)->first();
return $user !== null;
}
}
- В ваших правилах проверки используйте правило
EmailToUsernameRuleдля поля имени пользователя.
$validationRules = [
'username' => [
'rules' => 'required|valid_email|email_to_username',
'errors' => [
'email_to_username' => 'The {field} does not exist.',
],
],
];
- Сохраните изменения и протестируйте приложение.
Это всего лишь несколько способов изменить поле электронной почты на имя пользователя в CodeIgniter 4 Shield. Вы можете выбрать метод, который лучше всего соответствует требованиям вашего проекта.