РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
762 of 1392 menu

Метод needsRehash

Метод needsRehash класса Hash позволяет определить, нужно ли перехешировать уже сохранённый хеш пароля. Это особенно важно при изменении параметров хеширования (например, увеличение стоимости вычислений), чтобы повысить безопасность системы. Метод принимает хеш пароля в качестве аргумента и возвращает true, если хеш устарел и требует обновления, или false, если хеш соответствует текущим настройкам.

Синтаксис

<?php Hash::needsRehash($hashedValue); ?>

Параметры

Метод принимает один обязательный параметр:

  • $hashedValue - строка, содержащая хешированный пароль, который необходимо проверить.

Пример

Давайте проверим, нужно ли перехешировать пароль пользователя при его входе в систему:

<?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 || !Hash::check($request->password, $user->password)) { return response()->json(['error' => 'Invalid credentials'], 401); } if (Hash::needsRehash($user->password)) { $user->password = Hash::make($request->password); $user->save(); } return response()->json(['message' => 'Login successful']); } } ?>

Результат выполнения кода при успешном входе:

{"message":"Login successful"}

Пример

Давайте явно проверим хеш, созданный со старой стоимостью, и увидим, что метод вернёт true:

<?php use Illuminate\Support\Facades\Hash; // Старый хеш с меньшей стоимостью $oldHash = '$2y$10$abcdefghijklmnopqrstuvwxyz1234567890'; $res = Hash::needsRehash($oldHash); echo $res ? 'true' : 'false'; ?>

Результат выполнения кода:

"true"

Пример

Давайте создадим новый хеш с текущими настройками и проверим его:

<?php use Illuminate\Support\Facades\Hash; $password = 'secret123'; $newHash = Hash::make($password); $res = Hash::needsRehash($newHash); echo $res ? 'true' : 'false'; ?>

Результат выполнения кода:

"false"

Пример

Метод needsRehash также полезен при массовом обновлении паролей пользователей в фоновом режиме:

<?php namespace App\Console\Commands; use App\Models\User; use Illuminate\Console\Command; use Illuminate\Support\Facades\Hash; class RehashPasswords extends Command { protected $signature = 'passwords:rehash'; protected $description = 'Rehash outdated passwords'; public function handle() { $users = User::where('active', true)->get(); $count = 0; foreach ($users as $user) { if (Hash::needsRehash($user->password)) { $user->password = Hash::make($user->password); $user->save(); $count++; } } $this->info("Rehashed {$count} passwords"); } } ?>

Результат выполнения команды:

"Rehashed 5 passwords"

Смотрите также

  • метод make,
    который создаёт хеш пароля
  • метод check,
    который проверяет пароль на соответствие хешу
  • метод isHashed,
    который проверяет, является ли строка хешем
  • метод attempt,
    который выполняет попытку аутентификации пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить