前書き
useredit/laraveluiのレポジトリ
当ライブラリはMITライセンスです
laravel6系にて動作確認しております。
機能を追加したい場合はご自身でソースコード読んでください
laravel6 パッケージ開発ハンズオン(パッケージを作ったことない人向け)で同様の機能パッケージ開発ハンズオンあるので時間があれば是非
前提条件
laravel/uiをインストール
php artisan ui vue --authでUIを実装
インストール方法
プロジェクト直下で以下コマンドを実行
composer require useredit/laravelui
インストール完了後下記コマンドで各種controllerやRequestを実装
php artisan useredit
http://ドメイン名(localhost等)/userにアクセスし以下画面が出力できれば完成です
メール認証機能を実装する場合
https://readouble.com/laravel/6.x/ja/verification.html
上記の記事に沿えば簡単に実装できると思います
プロジェクト名/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', __('退会できました。ご利用ありがとうございます'));
});
}
}
プロジェクト名/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
といった風に変更するとメール認証に対応できます