14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

パスワード変更機能の実装

Posted at

前回実装した退会機能に引き続き今回はパスワード変更機能を実装していこうと思います。
(退会機能の実装についてはこちらから)
【Laravel】論理削除を利用して退会機能を実装する
##使用環境
AWS Cloud9
Laravel 5.5.50

##実装する機能の内容
今回のパスワード変更機能はメール認証をしない仕様で実装します。

##コントローラーの作成

$ php artisan make:controller ChangePasswordController

##ルートの定義

web.php
//省略
Route::group(['middleware'=>'auth'],function(){
//中略
        Route::get('/password/change','ChangePasswordController@edit')->name('password.form');
        Route::put('/password/change','ChangePasswordController@update')->name('password.change');

パスワードの変更についてはログイン認証をしたユーザーのみがアクセスできるようにする。
/password/changeのアドレスでパスワードの変更画面を表示させる。

##コントローラーの編集

ChangePasswordController.php
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class ChangePasswordController extends Controller
{
    public function edit()
    {
        return view('password.form');
    }
    
    protected function validator(array $data)
    {
        return Validator::make($data,[
            'new_password' => 'required|string|min:6|confirmed',
            ]);
    }
    
    public function update(Request $request)

        $user = \Auth::user();
        if(!password_verify($request->current_password,$user->password))
        {
            return redirect('/password/change')
                ->with('warning','パスワードが違います');
        }
        
        //新規パスワードの確認
        $this->validator($request->all())->validate();
        
        $user->password = bcrypt($request->new_password);
        $user->save();
        
        return redirect ('/')
            ->with('status','パスワードの変更が終了しました');
    }
}

editメソッドでパスワード変更画面(password.form)に飛ばします。
validatorファザードを使用してバリデーションをした値をupdateメソッドに返します。
updateメソッドではまず現在のパスワードをpassword_verifyを用いて確認、一致しないのであればエラーのフラッシュメッセージを返すよう記述。
その後新しく入力されたパスワードが要件を満たしているかを確認後保存されるように記述、成功したのであれば完了文をTOPページに表示させます。
今回はフラッシュメッセージを用いてエラーメッセージ等を出せるようにしていきます。
リダイレクト先でフラッシュメッセージを表示させるにはredirectメソッドにアロー演算子を用いてwith()メソッドでつなぎます。
第1引数にキー、第2引数に値を入れます。

####フラッシュメッセージの表示

form.php
    @if(session('warning'))
        <div class="alert alert-danger">
            {{ session('warning') }}
        </div>
    @endif

データはセッションを用いて表示されるのでsession()を使う。
statusを表示させるためにtop画面にも同様の追記。

スクリーンショット 2021-05-10 17.14.56.png
変更に成功した場合
スクリーンショット 2021-05-10 17.13.52.png
以前のパスワードが一致しない場合

参考:Laravel でフラッシュメッセージを表示する方法

##パスワード編集画面の実装
resources >> views >> password >> form

form.php
    
    @if(session('warning'))//エラー文を表示させる
        <div class="alert alert-danger">
            {{ session('warning') }}
        </div>
    @endif

     <div class="row mt-5 mb-5">
        <div class="col-sm-6 offset-sm-3">
            
            {!! Form::open(['route'=>'password.change','method'=>'put']) !!}
                <div class="form-group">
                    {!! Form::label('current_password','以前のパスワード') !!}
                    {!! Form::password('current_password',['class'=>'form-control']) !!}
                </div>
            
                <div class="form-group">
                    {!! Form::label('new_password','新しいパスワード') !!}
                    {!! Form::password('new_password',['class'=>'form-control']) !!}
                </div>
                
                <div class="form-group">
                    {!! Form::label('new_password_confirmation','パスワードの確認') !!}
                    {!! Form::password('new_password_confirmation',['class'=>'form-control']) !!}
                </div>
                
                {!! Form::submit('パスワードを変更する',['class'=>'btn btn btn-primary mt-2']) !!}
            {!! Form::close() !!}
            
        </div>
    </div>

    
    
@endsection

##感想
・フラッシュメッセージを新しく知れてよかった。
・自分でバリデーションを実行することでバリデーションの流れについて学べた。
・難しいかと思ったが意外とシンプルだった。
・次回はメール認証でのパスワード変更にチャレンジする。

##参考
Laravel入門
Laravel公式 バリデーション

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?