Класс Hash
Класс Hash используется для безопасного хеширования паролей
в Laravel. Он предоставляет простой интерфейс для работы с
алгоритмом Bcrypt, который является стандартом для хранения
паролей. Основными методами класса являются make для
создания хеша, check для проверки пароля, needsRehash
для определения необходимости перехеширования и isHashed
для проверки, является ли строка хешем.
Синтаксис
<?php
use Illuminate\Support\Facades\Hash;
// Создание хеша
Hash::make($password);
// Проверка пароля
Hash::check($password, $hashedValue);
// Проверка необходимости перехеширования
Hash::needsRehash($hashedValue);
// Проверка, является ли строка хешем
Hash::isHashed($value);
?>
Пример использования метода make
Давайте создадим хеш пароля для нового пользователя:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
public function store(Request $request)
{
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$user->password = Hash::make($request->password);
$user->save();
echo "User created successfully";
}
}
?>
Результат выполнения кода:
"User created successfully"
Пример использования метода check
Давайте проверим, соответствует ли введенный пароль сохраненному хешу:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function login(Request $request)
{
$user = User::where('email', $request->email)->first();
if (!$user) {
echo "User not found";
return;
}
if (Hash::check($request->password, $user->password)) {
echo "Login successful";
} else {
echo "Invalid credentials";
}
}
}
?>
Результат выполнения кода при правильном пароле:
"Login successful"
Результат выполнения кода при неправильном пароле:
"Invalid credentials"
Пример использования метода needsRehash
Давайте проверим, нужно ли перехешировать пароль пользователя при изменении настроек хеширования:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
public function updatePasswordHash(User $user)
{
if (Hash::needsRehash($user->password)) {
$user->password = Hash::make($user->password);
$user->save();
echo "Password rehashed successfully";
} else {
echo "No rehash needed";
}
}
}
?>
Результат выполнения кода:
"No rehash needed"
Пример использования метода isHashed
Давайте проверим, является ли строка хешем пароля:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Hash;
class ValidationController extends Controller
{
public function validateHash()
{
$plainText = 'password123';
$hash = '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi';
$res1 = Hash::isHashed($plainText);
$res2 = Hash::isHashed($hash);
echo "Plain text: " . ($res1 ? 'true' : 'false');
echo "Hash: " . ($res2 ? 'true' : 'false');
}
}
?>
Результат выполнения кода:
"Plain text: false"
"Hash: true"