🦔

Laravel-Adminでユーザーのパスワードを正常に保存する

2021/11/01に公開

Laravel-Adminでユーザー情報を管理していると、
「新規作成時にパスワードを指定した場合はハッシュかして保存する」のは当然ですが、パスワード以外のユーザー情報の更新時には「パスワード値はそのまま値を変更せずに保存する」必要があります。

このようにしてみると当たり前のことですが、
Laravel-Adminでは新規作成も更新も両方 form メソッドで表しているのがややこしいポイントなんですね。

では、

  • 新規作成時にはパスワードはハッシュ化して保存する
  • パスワード以外の情報更新時にはパスワードは値を変更しない
  • パスワード更新時にはパスワードをハッシュ化して保存する

これらの条件をもとに実装していきます。

実装する

まず、
formメソッドには普通にパスワード入力項目を入れます

$form->password('password', 'パスワード');

そして、次が肝心なのですが、formメソッドの中に「保存する前の処理」を記入していきます。

$form->saving(function (Form $form) {
  if ($form->password && $form->model()->password != $form->password) {
    $form->password = bcrypt($form->password);
  }
});

formにパスワードが記入されていて、今のパスワードと異なるパスワードが送られてきた場合に、ハッシュかして保存するというロジックになっています。

これでLaravel-Adminで正常にパスワードを保存することができます。
少しつまづいたのでメモにして残してみました。

Discussion