Метод password
Метод password класса Rule применяется для валидации паролей
с проверкой их сложности. Он позволяет указать требования к длине,
наличию цифр, букв в разных регистрах и специальных символов.
Метод возвращает объект правила, который можно использовать
в массиве правил валидации.
Синтаксис
<?php
use Illuminate\Validation\Rule;
Rule::password()
->min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
->uncompromised();
?>
Пример
Давайте создадим правило валидации для пароля с минимальной длиной 8 символов, который должен содержать буквы, цифры и хотя бы один специальный символ:
<?php
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
$rules = [
'password' => [
'required',
'string',
Rule::password()
->min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
]
];
$data = ['password' => 'Str0ng#Pass'];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
echo $validator->errors()->first('password');
} else {
echo "Password is valid";
}
?>
Результат выполнения кода:
"Password is valid"
Пример
Давайте проверим пароль, который не соответствует требованиям по длине:
<?php
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
$rules = [
'password' => [
'required',
'string',
Rule::password()
->min(10)
->letters()
->numbers()
]
];
$data = ['password' => 'short'];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
echo $validator->errors()->first('password');
} else {
echo "Password is valid";
}
?>
Результат выполнения кода:
"The password must be at least 10 characters."
Пример
Давайте используем метод uncompromised для проверки
пароля на утечки в базе данных:
<?php
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
$rules = [
'password' => [
'required',
'string',
Rule::password()
->min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
->uncompromised()
]
];
$data = ['password' => 'Password123!'];
$validator = Validator::make($data, $rules);
if ($validator->fails()) {
echo $validator->errors()->first('password');
} else {
echo "Password is valid and secure";
}
?>
Результат выполнения кода:
"The given password has appeared in a data leak. Please choose a different password."
Пример
Давайте создадим контроллер регистрации с использованием всех методов проверки пароля:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
use App\Models\User;
class RegisterController extends Controller
{
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => [
'required',
'string',
'confirmed',
Rule::password()
->min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
->uncompromised()
]
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password)
]);
return response()->json(['message' => 'User created successfully'], 201);
}
}
?>