
Laravelでパスワードを扱いたいけど、どうすればいいんだろう….
パスワードを安全に扱いたいし、パスワードの称号とかさせたいな…
こんな疑問を解決します。
Laravelでパスワードを登録するときに、ハッシュ化せずにそのままデータを登録していませんか?
それ非常にセキュリティ面で危険です。
ハッシュ化とは、パスワードを暗号化させるので、パスワードを安全に保管するもの。
この記事では、ハッシュ化やハッシュ化させたパスワードが一致するか調べる方法について解説しているので、ぜひ最後まで読んでくださいね!


Laravelでパスワードをハッシュ化する
セキュリティの面から入力したパスワードをそのままデータベースに登録するのはやめましょう。
パスワードをデータベースに登録するなら、ハッシュ化させて安全にパスワードを扱うべきです。
LaravelではHash::makeを使うことで、入力したパスワードをハッシュ化させることができます。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Hash;←←←←←←追加することを忘れないで!!!
class Company extends Model
{
use HasFactory;
// モデルに関連付けるテーブル
protected $table = 'companies';
// テーブルに関連付ける主キー
protected $primaryKey = 'company_id';
// 登録・更新可能なカラムの指定
protected $fillable = [
'company_name',
'password',
'created_at',
'updated_at'
];
/**
* companiesテーブルにデータを登録する
*
* @param string $companyName 会社名
* @param string $password パスワード
* @return コレクション配列
*/
public function insertCompany($companyName, $password)
{
return $this->create([
'company_name' => $companyName,
'password' => Hash::make($password),
]);
}
}
上記のようにHash::make(パスワード)とすれば、以下のようにハッシュ化されます。


Hashを使うにはuse Illuminate\Support\Facades\Hash;を追加する必要があることにも注意しましょう!
Laravelでパスワードを照会する
パスワードのハッシュでもう一つ覚えておきたいのが、



入力されたパスワードとハッシュ化されたパスワードが一致しているか調べたい場合はどうすんねん
ってこと。この場合は、Hash::checkを使いましょう。
// フォームから入力された会社パスワードを取得
$password = $request->password;
// パスワードをハッシュ化
①$hash_password = Hash::make($password);
②$hash_password = Hash::make('bbb');
if (Hash::check($password, $hash_password)) {
dd('パスワード一致');
} else {
dd('パスワードが一致しない');
}
Hash::check(‘入力されたパスワード’, ‘ハッシュ化されたパスワード’)のように使います。
もし入力されたパスワードがaaaの場合、①の時はパスワードが一致し、②の時はbbbのハッシュ化なのでパスワードは一致しません。
このようにHash::checkを使えば、パスワードの照会ができます。
Hash::checkを使わなくてもPHPのパスワード照会する関数であるpassword_verifyを使ってもできます。
// フォームから入力された会社パスワードを取得
$password = $request->password;
// パスワードをハッシュ化
$hash_password = Hash::make($password);
if (password_verify($password, $hash_password)) {
dd('パスワード一致');
} else {
dd('パスワードが一致しない');
}
実務で使うなら、入力したパスワードとすでに保存しているハッシュ化されたパスワードをチェックし、同じパスワードであればエラーにするなどが挙げられます。
/**
* companiesテーブルからcompany_id = 1のレコード1件取得
*/
public function findByCompanyId()
{
return $this
->where('company_id', 1)
->firstOrFail();
}
// フォームから入力された会社パスワードを取得
$password = $request->password;
// companiesテーブルからcompany_id =1のレコード1件を取得
$company = $this->company->findByCompanyId();
// 上記のレコードよりハッシュ化されたパスワードを取得
$hash_password = $company->password;
if (password_verify($password, $hash_password)) {
dd('パスワード一致');
} else {
dd('パスワードが一致しない');
}
こんな感じでできます。
【まとめ】Laravelのパスワードハッシュ化・照合
今回は、Laravelでパスワードをハッシュ化・照合する方法について解説しました。
この記事で紹介した内容は、パスワードを扱う上で必須中の必須ですし、実務でもよく使うのでぜひ覚えておきましょう。
このブログでは他にも実務で役立つLaravelについて発信しているので興味のある方は合わせてチェックしてみてくださいね!
コメント