为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
梦里花落0921 2023-04-21 16:52:56
我试图阻止用户使用某些名称,例如“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 会有这样的功能。
查看完整描述

4 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

  1. 转到 RegisterController.php。

    1. 将有一个 validator(array $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'],

        ]);

    }

希望这会有所帮助。


查看完整回答
反对 回复 2023-04-21
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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

我用保留的用户名创建了一个单独的“服务”特性,这样我就可以轻松地实现和扩展它。

  1. 创建一个Services文件夹在app/Services

  2. Reserved在以下位置创建特征app/Services/Reserved.php

保留.php

<?php


namespace App\Services;


trait Reserved

{

    public static function usernames()

    {

        return ['admin', 'operator', 'someBadWord'];

    }

}

接下来打开app/Http/Controllers/Auth/RegisteredUserController.php并导入特征,然后添加它。


现在只需使用规则将其添加到您的验证规则中notIn。


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

注册用户控制器.php

use Illuminate\Validation\Rule;

use App\Services\Reserved;


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', Rules\Password::defaults()],

        ]);


        ...

    }

}


查看完整回答
反对 回复 2023-04-21
?
侃侃无极

TA贡献2051条经验 获得超10个赞

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


use Illuminate\Validation\Rule;


Validator::make($data, [

    'toppings' => [

        'required',

        Rule::notIn(['admin', 'superuser']),//etc..

    ],

]);


查看完整回答
反对 回复 2023-04-21
?
大话西游666

TA贡献1817条经验 获得超14个赞

使用以下命令创建 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)

查看完整回答
反对 回复 2023-04-21
  • 4 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信