laravel_hash_check_error

登入驗證時的錯誤訊息

1
This password does not use the Bcrypt algorithm.(0)

原因:

由於舊的資料表的雜湊方式為 md5,但同時存在新的資料表使用bcrypt雜湊,所以在驗證時會出現錯誤。

程式碼:

1
2
3
4
$credentials = [
'account' => $account,
'password' => $password,
];

MemberUserProvider.php

1
2
3
4
5
6
7
8
9
10
11
12
public function validateCredentials(Authenticatable $user, array $credentials): bool
{
if ($user->getAuthPassword() === md5($plain)) {
Log::info('使用舊密碼登入', [$user->getAuthPassword()]);
return true;
}
if (Hash::check($plain, $user->getAuthPassword())) {
return true;
}

return false;
}

解決辦法:

Laravel 11 在驗證時,會自動開啟驗證密碼的格式是否符合,如果要關閉可以在 config/hashing.php 中設定 verifyfalse

1
2
3
4
'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 12),
'verify' => env('HASH_VERIFY', false),
],

參考資料:
https://laravel.com/docs/11.x/hashing#hash-algorithm-verification