![](/img/trans.png)
[英]PHP/MySql user registration, how can i make a user that wants to register not use the same username?
[英]How can I reject user registration with certain username in default laravel register form?
我試圖阻止用戶使用某些名稱,例如“管理員”或“操作員”。
我試過擺弄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 會有一些 function 像這樣。
像這樣的東西:
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 腳手架所做的。
我使用保留的用戶名創建了一個單獨的“服務”特征,以便我可以輕松實現和擴展它。
app/Services
創建一個Services
文件夾app/Services/Reserved.php
Reserved
一個特征保留<?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())
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.