laravel-adminでパスワードの設定の仕方
どうも、くずきです。
こないだLaravel
+ React
でWebサービスを構築した際に、社内の人間が使う管理画面も作ることになりました。
社内の人が使う管理画面なんて絶対に工数かけたくないので、調べた結果
の記事で試していた、
を使ってみた。結論から言うと神ってるほど楽。それはまた別記事で・・。
今回はlarave-admin
でパスワードを扱う場合のやり方について書こうと思う。
パスワードの隠し方
larave-admin
ドキュメントがある程度そろっており、password
の設定方法も記載されている。
http://laravel-admin.org/docs/#/en/model-form-fields?id=password-input
ただ、これだと若干わかりづらく、誤って$form->password('password')
と設定するとパスワードが丸見えという状態になってしまう。
そこで、第二引数に
$form->password('password', trans('admin.password'));
trans('admin.password')
をつけることによって、パスワードが隠れる状態にできる。
確認用パスワードの設定
大体のサービスでは、パスワード設定時には確認用に入力することがあると思う。
laravel-admin
でも簡単に設定でき、先に結論を書いてしまうと
$form->password('password', trans('admin.password')) ->rules('required|confirmed') ->default(function ($form) { return $form->model()->password; }); $form->password('password_confirmation', trans('admin.password_confirmation')) ->rules('required') ->default(function ($form) { return $form->model()->password; });
Laravel
にすでにあるバリデーションと同じように、rules
にconfirmed
の設定と
設定した入力名 + _confirmation
の入力を用意すれば実装できる。
パスワードの暗号方法と前のパスワードとの比較
パスワードも大体のサービス(というかほぼ全部)では暗号化されていると思う。
じゃあどうやって、パスワードの暗号化と前のパスワードとの比較を行うかというと
$form->saving(function (Form $form) { if ($form->password && $form->model()->password != $form->password) { $form->password = bcrypt($form->password); } });
saving
関数は保存する直前の処理を書くことができ、これを利用する。
保存直前に入力パスワードの比較し、前回と異なった場合はbcrypt
で暗号化し、入力値を上書きする。
ここまでの方法全てのコードをまとめる。
$form->password('password', trans('admin.password')) ->rules('required|confirmed') ->default(function ($form) { return $form->model()->password; }); $form->password('password_confirmation', trans('admin.password_confirmation')) ->rules('required') ->default(function ($form) { return $form->model()->password; }); $form->ignore(['password_confirmation']); $form->saving(function (Form $form) { if ($form->password && $form->model()->password != $form->password) { $form->password = bcrypt($form->password); } });
終わりに
やってみると簡単だったが、ドキュメントだけだとわかりづらいかも。