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

我试图阻止用户使用某些名称,例如“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']),

            ]);

        }

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


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


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


梦里花落0921
浏览 151回答 4
4回答

交互式爱情

转到 RegisterController.php。将有一个 validator(array $data) 函数来验证您的注册输入。为名称字段添加 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'],        ]);    }希望这会有所帮助。

qq_花开花谢_0

这是我在 Laravel 9 中使用 Breeze 脚手架所做的。我用保留的用户名创建了一个单独的“服务”特性,这样我就可以轻松地实现和扩展它。创建一个Services文件夹在app/ServicesReserved在以下位置创建特征app/Services/Reserved.php保留.php<?phpnamespace App\Services;trait Reserved{&nbsp; &nbsp; public static function usernames()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return ['admin', 'operator', 'someBadWord'];&nbsp; &nbsp; }}接下来打开app/Http/Controllers/Auth/RegisteredUserController.php并导入特征,然后添加它。现在只需使用规则将其添加到您的验证规则中notIn。Rule::notIn(Reserved::usernames())注册用户控制器.phpuse Illuminate\Validation\Rule;use App\Services\Reserved;class RegisteredUserController extends Controller{&nbsp; &nbsp; use Reserved;&nbsp; &nbsp; ...&nbsp; &nbsp; public function store(Request $request)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $request->validate([&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'username' => ['required', 'string', 'max:16', 'unique:users', Rule::notIn(Reserved::usernames())],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'password' => ['required', 'confirmed', Rules\Password::defaults()],&nbsp; &nbsp; &nbsp; &nbsp; ]);&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }}

侃侃无极

您可以尝试验证请求的名称是否不在预定义的阻止名称列表中:use Illuminate\Validation\Rule;Validator::make($data, [&nbsp; &nbsp; 'toppings' => [&nbsp; &nbsp; &nbsp; &nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; Rule::notIn(['admin', 'superuser']),//etc..&nbsp; &nbsp; ],]);

大话西游666

使用以下命令创建 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)
打开App,查看更多内容
随时随地看视频慕课网APP