Php Laravel验证-唯一用户名
我在让验证正常工作时遇到问题,目前它在不应该通过的时候通过了 用户名字段(Php Laravel验证-唯一用户名,php,laravel,laravel-5,laravel-5.3,Php,Laravel,Laravel 5,Laravel 5.3,我在让验证正常工作时遇到问题,目前它在不应该通过的时候通过了 用户名字段(users.Username)应根据users表中的client\u id而唯一。不同的客户端可以具有与其他客户端相同的用户名 $rule['username'] = Rule::unique('users', 'username')->where(function ($query) { $query->where('client_id', $this->
users.Username
)应根据users
表中的client\u id
而唯一。不同的客户端可以具有与其他客户端相同的用户名
$rule['username'] = Rule::unique('users', 'username')->where(function ($query) {
$query->where('client_id', $this->user()->client_id);
})->ignore($this->user()->id, 'id');
例如:
User1和Users2属于client\u id=2
不允许用户1将其用户名更改为用户2。您的验证逻辑工作正常,没有任何问题。只需确保您传递了正确的用户id和客户端id 样本条件
DB data
id username client_id
1 user1 1
2 user2 1
3 user2 2
Request data by user with id 1 (client_id - 1)
username validation
user1 pass
user2 fail
user3 pass
Request data by user with id 3 (client_id - 2)
username validation
user1 pass
user2 pass
user3 pass
样本测试代码
$userId = 1;
$userClientId = 1;
$data = [
'username' => 'user1',
];
$validator = \Validator::make($data, [
'username' => Rule::unique('users', 'username')->where(function ($query) use ($userClientId) {
$query->where('client_id', $userClientId);
})->ignore($userId)
]);
if ($validator->fails()) {
dd('fail');
}
dd('pass');
您的验证逻辑工作完美,没有任何问题。只需确保您传递了正确的用户id和客户端id 样本条件
DB data
id username client_id
1 user1 1
2 user2 1
3 user2 2
Request data by user with id 1 (client_id - 1)
username validation
user1 pass
user2 fail
user3 pass
Request data by user with id 3 (client_id - 2)
username validation
user1 pass
user2 pass
user3 pass
样本测试代码
$userId = 1;
$userClientId = 1;
$data = [
'username' => 'user1',
];
$validator = \Validator::make($data, [
'username' => Rule::unique('users', 'username')->where(function ($query) use ($userClientId) {
$query->where('client_id', $userClientId);
})->ignore($userId)
]);
if ($validator->fails()) {
dd('fail');
}
dd('pass');