簡體   English   中英

如何在默認 laravel 注冊表單中拒絕使用特定用戶名的用戶注冊?

[英]How can I reject user registration with certain username in default laravel register form?

我試圖阻止用戶使用某些名稱,例如“管理員”或“操作員”。

我試過擺弄Controllers/Auth/RegisterControllerController/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 會有一些 function 像這樣。

  1. Go 到 RegisterController.php。
    1. 將有一個驗證器(數組 $data)function 來驗證您的注冊輸入。
    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 Illuminate\Validation\Rule;

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

希望能幫助到你。

使用以下命令創建 RegisterControllerRequest:

php artisan make:request RegisterControllerRequest

app/Http/Requests中找出您最近創建的文件,然后將rules()更新為:

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

然后更新您的 controller 以使用新的驗證:

在命名空間后添加:

use  App\Http\Requests\RegisterControllerRequest;

最后將驗證作為參數注入您的注冊方法中:

public function register (RegisterControllerRequest $request)

有關更多信息,請查看文檔:https://laravel.com/docs/7.x/validation#form-request-validation

這是我在 Laravel 9 中使用 Breeze 腳手架所做的。

我使用保留的用戶名創建了一個單獨的“服務”特征,以便我可以輕松實現和擴展它。

  1. app/Services創建一個Services文件夾
  2. app/Services/Reserved.php Reserved一個特征保留

保留。php

<?php

namespace App\Services;

trait Reserved
{
    public static function usernames()
    {
        return ['admin', 'operator', 'someBadWord'];
    }
}
  1. 接下來打開app/Http/Controllers/Auth/RegisteredUserController.php並導入特征,然后添加它。

  2. 現在只需使用notIn規則將其添加到您的驗證規則中。

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

RegisteredUserController.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()],
        ]);

        ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM