Изменение электронной почты на имя пользователя в CodeIgniter 4 Shield: методы и примеры

Чтобы изменить поле электронной почты на имя пользователя в CodeIgniter 4 Shield, вы можете использовать несколько методов. Вот несколько примеров:

Метод 1: расширение модели аутентификации Shield

  1. Создайте новый файл с именем MyAuthModel.phpв каталоге App\Models.

  2. Вставьте следующий код в файл 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();
    }
}
  1. В вашем AuthController.phpили любом другом соответствующем контроллере замените use Myth\Auth\Controllers\AuthController;на use App\Controllers \AuthController;.

  2. В файле AuthController.phpобновите строку protected $modelName = UserModel::class;на protected $modelName = MyAuthModel:: класс;.

  3. Сохраните изменения и протестируйте приложение.

Метод 2: собственное правило проверки

  1. Создайте новый файл с именем EmailToUsernameRule.phpв каталоге App\Validations\Rules.

  2. Вставьте следующий код в файл 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;
    }
}
  1. В ваших правилах проверки используйте правило EmailToUsernameRuleдля поля имени пользователя.
$validationRules = [
    'username' => [
        'rules' => 'required|valid_email|email_to_username',
        'errors' => [
            'email_to_username' => 'The {field} does not exist.',
        ],
    ],
];
  1. Сохраните изменения и протестируйте приложение.

Это всего лишь несколько способов изменить поле электронной почты на имя пользователя в CodeIgniter 4 Shield. Вы можете выбрать метод, который лучше всего соответствует требованиям вашего проекта.