如何在默认的拉拉维尔注册表单中拒绝使用特定用户名的用户注册?



我试图阻止用户使用某些名称,如"管理员"或"操作员"。

我尝试摆弄控制器/身份验证/寄存器控制器和控制器/寄存器控制器,但失败了。

我尝试的是这样的:

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']),
]);
}

上面的代码给了我这个错误:

传递给 Illuminate\Auth\SessionGuard 的参数 1::login(( 必须是 Illuminate\Contracts\Auth\Authenticatable的实例,给定字符串, 在/var/www/vendor/laravel/ui/auth-backend/RegistersUsers中调用.php 在第 36 行

我还搜索了验证器是否可以阻止特定单词但失败了。 我知道我可以通过使用 JS 来解决这个问题,但我认为 Laravel 会有一些这样的功能。

  1. 转到 RegisterController.php。
    1. 将有一个验证器(数组$data(函数来验证您的注册输入。
    2. 为名称字段添加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'],
]);
}

希望这有所帮助。

您可以尝试验证请求的名称是否不在预定义的阻止名称列表中:

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

希望对您有所帮助。

这是我在 Laravel 9 中使用微风脚手架所做的。

我使用保留的用户名创建了一个单独的"服务"特征,以便我可以轻松实现和扩展它。

  1. app/Services创建Services文件夹
  2. app/Services/Reserved.php创建Reserved特征

保留.php

<?php
namespace AppServices;
trait Reserved
{
public static function usernames()
{
return ['admin', 'operator', 'someBadWord'];
}
}
  1. 接下来打开app/Http/Controllers/Auth/RegisteredUserController.php并导入特征,然后添加它。

  2. 现在,只需使用notIn规则将其添加到验证规则中即可。

Rule::notIn(Reserved::usernames())

注册用户控制器.php

use IlluminateValidationRule;
use AppServicesReserved;
class RegisteredUserController extends Controller
{
use Reserved;
...
public function store(Request $request)
{
$request->validate([
'username' => ['required', 'string', 'max:16', 'unique:users', Rule::notIn(Reserved::usernames())],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', RulesPassword::defaults()],
]);
...
}
}

使用以下命令创建 RegisterControllerRequest:

php artisan make:request RegisterControllerRequest

app/Http/Requests中找到您最近创建的文件,然后将rules()更新为:

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

然后更新控制器以使用新的验证:

在命名空间添加后:

use  AppHttpRequestsRegisterControllerRequest;

最后将验证作为参数注入到您的注册方法中:

public function register (RegisterControllerRequest $request)

有关详细信息,请查看文档:https://laravel.com/docs/7.x/validation#form-request-validation

最新更新