３分で実装できる　Laravelでユーザ編集、退会機能(忙しい人向け)

#前書き
[useredit/laraveluiのレポジトリ](https://github.com/honpoio/useredit-laravelui)
当ライブラリは[MITライセンス](https://ja.wikipedia.org/wiki/MIT_License)です
laravel6系にて動作確認しております。
機能を追加したい場合はご自身でソースコード読んでください

[laravel6 パッケージ開発ハンズオン(パッケージを作ったことない人向け)](https://zenn.dev/mutturi_prin/articles/dbd1ad4c4ba37c)で同様の機能パッケージ開発ハンズオンあるので時間があれば是非
#前提条件
laravel/uiをインストール
php artisan ui vue --authでUIを実装


#インストール方法
プロジェクト直下で以下コマンドを実行

```
composer require useredit/laravelui
```
インストール完了後下記コマンドで各種controllerやRequestを実装


```
php artisan useredit
```

http://ドメイン名(localhost等)/userにアクセスし以下画面が出力できれば完成です


![スクリーンショット 2021-01-08 10.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771733/a7697edc-d0d0-791a-b807-ef157f2b2e9a.png)




#　メール認証機能を実装する場合

https://readouble.com/laravel/6.x/ja/verification.html
上記の記事に沿えば簡単に実装できると思います



```php:プロジェクト名/vendor/useredit/laravelui/UserEdit_Operation_DB.php 

<?php

use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;


class UserEdit_Operation_DB
{
    public function EmailUpdate($request){
        //メール情報更新
        return DB::transaction(function () use($request){
            User::where('id',$request->UserId)
            ->lockForUpdate()
            //専有ロック
            ->update(['email'=> $request->Email,]);
            
            User::where('id',$request->UserId)
            ->update(['email_verified_at' =>NULL]);
            //再度メール認証
            return redirect('user')->with('status', __('メールアドレスの変更に成功しました'));
        });
    }
    public function PasswordChange($request,$user){
        //パスワード変更
        return DB::transaction(function () use($request,$user){
            User::where('id',$request->UserId)
            ->lockForUpdate();
            $user->password = bcrypt($request->newPassword);
            $user->save();
            return redirect('/email/verify')->with('status', __('パスワードの変更に成功しました'));#リダイレクト先を変更
        });
    }
    public function Withdrawal($request,$id){
        //退会
        return DB::transaction(function () use($request,$id){
            User::where('id',$id)
            ->lockForUpdate()
            ->delete();
            Auth::logout();
            return redirect('/')->with('status', __('退会できました。ご利用ありがとうございます'));
        });
    }

}

```



```php:プロジェクト名/resources/views/auth/verify.blade.php
@extends('layouts.app')

@section('content')

    @if (session('status'))
    {{ session('status') }} 
    @endif
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Verify Your Email Address') }}</div>

                <div class="card-body">
                    @if (session('resent'))
                        <div class="alert alert-success" role="alert">
                            {{ __('A fresh verification link has been sent to your email address.') }}
                        </div>
                    @endif

                    {{ __('Before proceeding, please check your email for a verification link.') }}
                    {{ __('If you did not receive the email') }},
                    <form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
                        @csrf
                        <button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
```

といった風に変更するとメール認証に対応できます