イントロダクションIntroduction
LaravelのHash
ファサードは保存するユーザーパスワードに対し、安全なBcryptハッシュを提供します。Laravelアプリケーションに組み込まれている、LoginController
とRegisterController
を使用していれば、登録と認証で自動的にBcrypt使用します。The Laravel Hash
facade[/docs/{{version}}/facades] provides secure Bcrypt hashing for storing user passwords. If you are using the built-in LoginController
and RegisterController
classes that are included with your Laravel application, they will automatically use Bcrypt for registration and authentication.
{tip} Bcrypt is a great choice for hashing passwords because its "work factor" is adjustable, which means that the time it takes to generate a hash can be increased as hardware power increases.
">Tip!! Bcryptは「ストレッチ回数」が調整できるのでパスワードのハッシュには良い選択肢です。つまりハードウェアのパワーを上げればハッシュの生成時間を早くすることができます。
基本的な使用法Basic Usage
Hash
ファサードのmake
メソッドを呼び出し、パスワードをハッシュできます。You may hash a password by calling the make
method on the Hash
facade:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller;
class UpdatePasswordController extends Controller
{
/**
* ユーザーパスワードを更新
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
// 新しいパスワードの長さのバリデーション…
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
}
さらに、make
メソッドではrounds
オプションを使い、bcryptハッシュアルゴリズムのワークファクタを管理できます。しかしながら、多くのアプリケーションではデフォルトのままで、構わないでしょう。The make
method also allows you to manage the work factor of the bcrypt hashing algorithm using the rounds
option; however, the default is acceptable for most applications:
$hashed = Hash::make('password', [
'rounds' => 12
]);
パスワードとハッシュ値の比較Verifying A Password Against A Hash
check
メソッドにより指定した平文文字列と指定されたハッシュ値を比較確認できます。しかしLaravelに含まれているLoginController
を使っている場合は、これを直接使用することはないでしょう。このコントローラがこのメソッドを自動的に呼び出します。The check
method allows you to verify that a given plain-text string corresponds to a given hash. However, if you are using the LoginController
included with Laravel[/docs/{{version}}/authentication], you will probably not need to use this directly, as this controller automatically calls this method:
if (Hash::check('plain-text', $hashedPassword)) {
// パスワード一致
}
パスワードの再ハッシュが必要か確認Checking If A Password Needs To Be Rehashed
パスワードがハシュされてからハッシャーのストレッチ回数が変更されているかを調べるには、needsRehash
メソッドを使います。The needsRehash
function allows you to determine if the work factor used by the hasher has changed since the password was hashed:
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}