Как я могу отклонить регистрацию пользователя с определенным именем пользователя в форме регистрации по умолчанию laravel? - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь запретить пользователям использовать определенные имена, такие как 'admin' или 'operator'.

Я пробовал возиться с обоими Controllers / Auth / RegisterController и Controller / RegisterController , но не удалось.

То, что я пробовал, было примерно таким:

in Controllers/Auth/RegisterController,


if ($data['name'] === 'admin' || $data['name'] === 'operator') {
             return redirect()->back()->withErrors(['Invalid username']);
        } 
else {
    session()->flash('message', 'Welcome!');

    return User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => Hash::make($data['password']),
            ]);
        }

Приведенный выше код дал мне эту ошибку:

Аргумент 1, переданный в Illuminate \ Auth \ SessionGuard :: login (), должен быть экземпляром Illuminate \ Contracts \ Auth \ Authenticatable, заданной строкой, вызываемой в / var / www/vendor/laravel/ui/auth-backend/RegistersUsers.php в строке 36

Я также искал, могут ли валидаторы блокировать определенные c слова, но это не удалось. Я знаю, что могу обойти это, используя JS, но я думаю, что Laravel будет иметь такую ​​функцию.

Ответы [ 3 ]

1 голос
/ 30 мая 2020
  1. Go в RegisterController. php.
  2. Будет функция валидатора (массив $ data), которая проверяет ваш регистрационный ввод.
  3. Добавить проверку not_in для поля имени.

Примерно так:

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255', 'not_in:admin,operator'],
            'pan' => ['required', 'string', 'min:10', 'max:10', 'unique:users,username'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

Надеюсь, это поможет.

0 голосов
/ 30 мая 2020

Создайте RegisterControllerRequest, используя следующую команду:

php artisan make:request RegisterControllerRequest

найдите ваш недавно созданный файл в app/Http/Requests, затем обновите rules() до:

public function rules()
{
    return [
        'name' => 'required|notIn:admin,operator',
    ];
}

Затем обновите свой контроллер для использования новой проверки:

После пространства имен добавьте:

use  App\Http\Requests\RegisterControllerRequest;

И, наконец, введите проверку в качестве параметра в методе регистрации:

public function register (RegisterControllerRequest $request)

Для дополнительная информация проверьте документацию: https://laravel.com/docs/7.x/validation#form -request-validation

0 голосов
/ 30 мая 2020

Вы можете попробовать проверить, нет ли запрошенного имени в списке заранее определенных заблокированных имен:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'toppings' => [
        'required',
        Rule::notIn(['admin', 'superuser']),//etc..
    ],
]);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...