【Laravel】tinkerでデータベースを操作し、パスワードにハッシュ化した値を入れる
| 更新: 2024/10/23 | 2642文字
今回はLaravel搭載のtinker機能でデータベースを操作してみます。ドキュメントを見てもわかりにくかったんですが、搭載のハッシュ化メソッドで処理した後の値も入れられるようなので試してみました。さっそく内容を確認していきましょう。
目次
Laravelのtinkerとは?
ドキュメント見た感じだと標準で入っているらしい、REPL(ユーザーとインタプリタが対話的にコード片を実行できるもの)とのことです。サイトによっては『コマンドで操作できるLaravelの対話モード』のような呼ばれ方をしていることもあります。用途的には、最初は何に使うかわかりませんでした。
とはいえ、qiitaのタグなどでいろいろな開発者さんの記事を見ていると『デバッグ・データベース接続確・ユーザー登録・搭載ファンクションの処理確認』みたいにつかわれていることが多いようです。公式ドキュメントより使用例見た方がわかりやすいかもです。
artisan tinker(公式ドキュメント英語)
https://laravel.com/docs/11.x/artisan#tinker
tinker(qiitaのタグ)
https://qiita.com/tags/tinker
管理人がtinker使う羽目になった状況→ログインチェックにハッシュ化したパスワードがあり、データベース登録時にハッシュ化して入れたい
で、管理人がtinker使う羽目になった状況です。現在テスト的に作っているwebアプリケーションで、よくある機能なんですが『ハッシュ化したパスワードの比較』というのがあります。セキュリティ上、そのままの文字列でデータベースにパスワードをいれとかない、みたいなやつです。
テスト的に作っていることもあり、管理者ユーザーについては『データベース直接SQLで入れる』『コマンドで入れる』などがありますが、Laravelのハッシュアルゴリズムがわからなかったので、そのままハッシュされてない値を入れると、合わなくなります。
そこで、搭載ファンクションを混ぜつつサクッと使える機能がないかなということで、tinkerにたどり着きました。
Laravel・tinkerでデータベースを操作・パスワードにハッシュ化した値を入れる方法
事前準備:マイグレーションを行いデータベースを定義しておく
まずは、データベースに入れる内容を定義するということで、マイグレーションを行っておきます。今後のテスト用アプリケーションでも使うんですけど、
『id(bigIncrements),name(string),email(string),password(string),disp_name(string),role(string),created_at(timestamp)』のように定義しました。
Laravelマイグレーションについては、当サイトでも実際に行っておりますので、手順についてはこちらもご確認ください。
(当サイト過去記事)データベースのマイグレーションとは?実行するとどうなるの?
https://division-web.atelier-ss-agency.com/10538/laravel-migration/
artisan tinkerコマンドを入れて、データベースにデータ追加するメソッドを使う
まずはcd /xampp/htdocs/laravelで、管理人環境のLaravelインストールディレクトリにパス通して、artisan tinkerを入れます。その後ろはDBのinsertを使ってデータ追加するコードで、passwordの部分にはHashがかかるようになっています。テーブル名は『t_lar_admin_user』としました。
php artisan tinker
$param = [
'name' => 'editor001',
'email' => 'editor001@example.com',
'password' => Hash::make('gtfyji78'),
'disp_name'=>'管理人さん',
'role'=>'管理者'
];
DB::table('t_lar_admin_user')->insert($param);
exit;
やってみると、パスワード部分などもハッシュ化して処理されているようですね。insertのあとに、tinkerから抜けるexitを入れていますが、このexitのあとデータを確認してみると、データが入っています。(insertの段階でデータベース確認しましたが入っていませんでした。)
データベース上で入ったデータを確認してみる
tinkerでDB::table->insertをおこなったテーブルです。実際にこんな感じでデータが入りました。今回一番やりたかったhashの部分もokですね。これでログインチェックのときにhash使っても大丈夫そうです。
あとがき・まとめ
- Laravelのtinkerは、コマンドで操作できるLaravelの対話モードで、デバッグ・データベース接続確・ユーザー登録・搭載ファンクションの処理確認などに使われている
- データベース・パスワード部分にハッシュ化した値を入れたいときも、tinkerで搭載メソッドを絡めてコマンドで操作できる
まとめると、こんなところでしょうか。『自由にユーザーが登録できるわけではない』というアプリケーションの場合でも、搭載ファンクションを絡めてデータベースに値を格納できるので、状況によっては利用すると便利なのではないでしょうか。
【カテゴリ】- Laravel
【タグ】- PHP, データベース