イントロダクション
LaravelのHash
ファサードは保存するパスワードに安全なBcryptハッシュを提供します。Laravelアプリケーションに含まれているAuthController
コントローラーを使用していれば、ユーザーから入力されたハッシュされていないパスワードをBcryptされたパスワードと比較し確認する面倒を見てくれます。
Bcryptは「ストレッチ回数」が調整できるのでパスワードのハッシュには良い選択肢です。つまりハードウェアのパワーを上げればハッシュの生成時間を早くすることができます。
基本的な使用法
Hash
ファサードのmake
メソッドを呼び出し、パスワードをハッシュできます。
<?php
namespace App\Http\Controllers;
use Hash;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* ユーザーパスワードを更新
*
* @param Request $request
* @param int $id
* @return Response
*/
public function updatePassword(Request $request, $id)
{
$user = User::findOrFail($id);
// 新しいパスワードの長さのバリデーション…
$user->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
}
別の方法として、bcrypt
ヘルパ関数を使うこともできます。
bcrypt('平文');
パスワードとハッシュ値の比較
check
メソッドにより指定した平文文字列と指定されたハッシュ値を比較確認できます。しかしLaravelに含まれているAuthController
を使っている場合は、認証コントローラーがこのメソッドを自動的に呼び出します。
if (Hash::check('平文', $hashedPassword)) {
// パスワード一致…
}
パスワードの再ハッシュが必要か確認
パスワードがハシュされてからハッシャーのストレッチ回数が変更されているかを調べるには、needsRehash
メソッドを使います。
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('平文');
}