我试图阻止用户使用某些名称,如"管理员"或"操作员"。
我尝试摆弄控制器/身份验证/寄存器控制器和控制器/寄存器控制器,但失败了。
我尝试的是这样的:
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 会有一些这样的功能。
- 转到 RegisterController.php。
- 将有一个验证器(数组$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'],
]);
}
希望这有所帮助。
您可以尝试验证请求的名称是否不在预定义的阻止名称列表中:
use IlluminateValidationRule;
Validator::make($data, [
'toppings' => [
'required',
Rule::notIn(['admin', 'superuser']),//etc..
],
]);
希望对您有所帮助。
这是我在 Laravel 9 中使用微风脚手架所做的。
我使用保留的用户名创建了一个单独的"服务"特征,以便我可以轻松实现和扩展它。
- 在
app/Services
创建Services
文件夹 - 在
app/Services/Reserved.php
创建Reserved
特征
保留.php
<?php
namespace AppServices;
trait Reserved
{
public static function usernames()
{
return ['admin', 'operator', 'someBadWord'];
}
}
接下来打开
app/Http/Controllers/Auth/RegisteredUserController.php
并导入特征,然后添加它。现在,只需使用
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