Метод isHashed
Метод isHashed класса Hash применяется для проверки, является ли переданная строка хешем, созданным с использованием стандартного драйвера хеширования Laravel (обычно Bcrypt). Метод принимает один обязательный параметр - строку для проверки, и возвращает логическое значение true, если строка является корректным хешем, и false в противном случае. Этот метод часто используется совместно с методом needsRehash для определения необходимости обновления хеша пользователя.
Синтаксис
<?php
use Illuminate\Support\Facades\Hash;
Hash::isHashed($value);
?>
Параметры:
-
$value(string) - строка, которую необходимо проверить на принадлежность к хешу.
Возвращаемое значение:
-
true, если строка является хешем, созданным системой Laravel, иначеfalse.
Пример использования с проверкой пароля
Рассмотрим типичный пример использования метода isHashed при проверке пароля пользователя. Предположим, у нас есть модель User с полем password, и мы хотим убедиться, что пароль уже захеширован перед его использованием в методе check:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function login(Request $request)
{
$user = User::where('email', $request->email)->first();
if ($user && Hash::check($request->password, $user->password)) {
if (Hash::isHashed($request->password)) {
echo "Password is already hashed";
} else {
echo "Password is not hashed";
}
return;
}
echo "Invalid credentials";
}
}
?>
Результат выполнения кода при правильных данных:
"Password is not hashed"
Пример проверки различных строк
Проверим, какие строки метод isHashed считает хешем:
<?php
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Route;
Route::get('/check-hash', function () {
$hashed = Hash::make('password123');
$plain = 'password123';
$invalid = 'not-a-hash';
$res = [
'Hashed string' => Hash::isHashed($hashed),
'Plain string' => Hash::isHashed($plain),
'Invalid string' => Hash::isHashed($invalid),
];
print_r($res);
});
?>
Результат выполнения кода:
Array
(
[Hashed string] => 1
[Plain string] =>
[Invalid string] =>
)
Как видно из примера, только строка, созданная с помощью Hash::make, возвращает true.
Пример с методом needsRehash
Метод isHashed часто используется в паре с needsRehash для проверки, нужно ли обновить хеш пользователя, например, при изменении алгоритма хеширования:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
class UserController extends Controller
{
public function updatePassword(Request $request)
{
$user = User::find(1);
if (Hash::isHashed($user->password)) {
if (Hash::needsRehash($user->password)) {
$user->password = Hash::make($user->password);
$user->save();
echo "Password rehashed successfully";
} else {
echo "Password does not need rehash";
}
} else {
echo "Password is not hashed, please hash it first";
}
}
}
?>
Результат выполнения кода:
"Password does not need rehash"
Смотрите также
-
метод
make,
который создает хеш из строки -
метод
check,
который проверяет строку на соответствие хешу -
метод
needsRehash,
который проверяет необходимость перехеширования -
метод
bcrypt,
который является вспомогательной функцией для хеширования