アカウント削除画面の追加
This commit is contained in:
parent
a71aa0c3b6
commit
f132955be7
18
app/DeactivatedUser.php
Normal file
18
app/DeactivatedUser.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 削除済Userのユーザー名履歴
|
||||||
|
*/
|
||||||
|
class DeactivatedUser extends Model
|
||||||
|
{
|
||||||
|
public $incrementing = false;
|
||||||
|
protected $keyType = 'string';
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'name'
|
||||||
|
];
|
||||||
|
}
|
@ -2,10 +2,14 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\DeactivatedUser;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
class SettingController extends Controller
|
class SettingController extends Controller
|
||||||
{
|
{
|
||||||
@ -67,6 +71,51 @@ class SettingController extends Controller
|
|||||||
return redirect()->route('setting.privacy')->with('status', 'プライバシー設定を更新しました。');
|
return redirect()->route('setting.privacy')->with('status', 'プライバシー設定を更新しました。');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deactivate()
|
||||||
|
{
|
||||||
|
return view('setting.deactivate');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroyUser(Request $request)
|
||||||
|
{
|
||||||
|
// パスワードチェック
|
||||||
|
$validated = $request->validate([
|
||||||
|
'password' => 'required|string'
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (!Hash::check($validated['password'], Auth::user()->getAuthPassword())) {
|
||||||
|
throw ValidationException::withMessages([
|
||||||
|
'password' => 'パスワードが正しくありません。'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// データの削除
|
||||||
|
set_time_limit(0);
|
||||||
|
DB::transaction(function () {
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
// 関連レコードの削除
|
||||||
|
// TODO: 別にDELETE文相当のクエリを一発発行するだけでもいい?
|
||||||
|
foreach ($user->ejaculations as $ejaculation) {
|
||||||
|
$ejaculation->delete();
|
||||||
|
}
|
||||||
|
foreach ($user->likes as $like) {
|
||||||
|
$like->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 先にログアウトしないとユーザーは消せない
|
||||||
|
Auth::logout();
|
||||||
|
|
||||||
|
// ユーザーの削除
|
||||||
|
$user->delete();
|
||||||
|
|
||||||
|
// ユーザー名履歴に追記
|
||||||
|
DeactivatedUser::create(['name' => $user->name]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return view('setting.deactivated');
|
||||||
|
}
|
||||||
|
|
||||||
// ( ◠‿◠ )☛ここに気づいたか・・・消えてもらう ▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ
|
// ( ◠‿◠ )☛ここに気づいたか・・・消えてもらう ▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ
|
||||||
// public function password()
|
// public function password()
|
||||||
// {
|
// {
|
||||||
|
@ -53,6 +53,11 @@ class User extends Authenticatable
|
|||||||
return Auth::check() && $this->id === Auth::user()->id;
|
return Auth::check() && $this->id === Auth::user()->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function ejaculations()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Ejaculation::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function likes()
|
public function likes()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Like::class);
|
return $this->hasMany(Like::class);
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateDeactivatedUsersTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('deactivated_users', function (Blueprint $table) {
|
||||||
|
$table->string('name', 15);
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
$table->primary('name');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('deactivated_users');
|
||||||
|
}
|
||||||
|
}
|
5
resources/assets/js/setting/deactivate.js
vendored
Normal file
5
resources/assets/js/setting/deactivate.js
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
$('#deactivate-form').on('submit', function () {
|
||||||
|
if (!confirm('本当にアカウントを削除してもよろしいですか?')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
@ -10,6 +10,8 @@
|
|||||||
href="{{ route('setting') }}"><span class="oi oi-person mr-1"></span> プロフィール</a>
|
href="{{ route('setting') }}"><span class="oi oi-person mr-1"></span> プロフィール</a>
|
||||||
<a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'setting.privacy' ? 'active' : '' }}"
|
<a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'setting.privacy' ? 'active' : '' }}"
|
||||||
href="{{ route('setting.privacy') }}"><span class="oi oi-shield mr-1"></span> プライバシー</a>
|
href="{{ route('setting.privacy') }}"><span class="oi oi-shield mr-1"></span> プライバシー</a>
|
||||||
|
<a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'setting.deactivate' ? 'active' : '' }}"
|
||||||
|
href="{{ route('setting.deactivate') }}"><span class="oi oi-trash mr-1"></span> アカウントの削除</a>
|
||||||
{{--<a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'setting.password' ? 'active' : '' }}"
|
{{--<a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'setting.password' ? 'active' : '' }}"
|
||||||
href="{{ route('setting.password') }}"><span class="oi oi-key mr-1"></span> パスワード</a>--}}
|
href="{{ route('setting.password') }}"><span class="oi oi-key mr-1"></span> パスワード</a>--}}
|
||||||
</div>
|
</div>
|
||||||
|
32
resources/views/setting/deactivate.blade.php
Normal file
32
resources/views/setting/deactivate.blade.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
@extends('setting.base')
|
||||||
|
|
||||||
|
@section('title', 'アカウントの削除')
|
||||||
|
|
||||||
|
@section('tab-content')
|
||||||
|
<h3>アカウントの削除</h3>
|
||||||
|
<hr>
|
||||||
|
<p>Tissueからあなたのアカウントに関する情報を削除します。</p>
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<h4 class="alert-heading"><span class="oi oi-warning"></span> 警告</h4>
|
||||||
|
<p><strong>削除はすぐに実行され、取り消すことはできません!</strong></p>
|
||||||
|
<p class="my-0">なりすましを防止するため、あなたのユーザー名はサーバーに記録されます。今後、同じユーザー名を使って再登録することはできません。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form id="deactivate-form" action="{{ route('setting.deactivate.destroy') }}" method="post">
|
||||||
|
{{ csrf_field() }}
|
||||||
|
<div class="form-group">
|
||||||
|
<p>上記の条件に同意してアカウントを削除する場合は、パスワードを入力して削除ボタンを押してください。</p>
|
||||||
|
<input name="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" required>
|
||||||
|
|
||||||
|
@if ($errors->has('password'))
|
||||||
|
<div class="invalid-feedback">{{ $errors->first('password') }}</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-danger mt-2">削除</button>
|
||||||
|
</form>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@push('script')
|
||||||
|
<script src="{{ mix('js/setting/deactivate.js') }}"></script>
|
||||||
|
@endpush
|
16
resources/views/setting/deactivated.blade.php
Normal file
16
resources/views/setting/deactivated.blade.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
@extends('layouts.base')
|
||||||
|
|
||||||
|
@section('title', 'アカウント削除完了')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container">
|
||||||
|
<h3>アカウントを削除しました</h3>
|
||||||
|
<hr>
|
||||||
|
<p>Tissueをご利用いただき、ありがとうございました。</p>
|
||||||
|
<p class="my-5 text-center"><a class="btn btn-link" href="{{ route('home') }}">トップページへ</a></p>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@push('script')
|
||||||
|
<script src="{{ mix('js/setting/deactivate.js') }}"></script>
|
||||||
|
@endpush
|
@ -36,6 +36,8 @@ Route::middleware('auth')->group(function () {
|
|||||||
Route::post('/setting/profile', 'SettingController@updateProfile')->name('setting.profile.update');
|
Route::post('/setting/profile', 'SettingController@updateProfile')->name('setting.profile.update');
|
||||||
Route::get('/setting/privacy', 'SettingController@privacy')->name('setting.privacy');
|
Route::get('/setting/privacy', 'SettingController@privacy')->name('setting.privacy');
|
||||||
Route::post('/setting/privacy', 'SettingController@updatePrivacy')->name('setting.privacy.update');
|
Route::post('/setting/privacy', 'SettingController@updatePrivacy')->name('setting.privacy.update');
|
||||||
|
Route::get('/setting/deactivate', 'SettingController@deactivate')->name('setting.deactivate');
|
||||||
|
Route::post('/setting/deactivate', 'SettingController@destroyUser')->name('setting.deactivate.destroy');
|
||||||
// Route::get('/setting/password', 'SettingController@password')->name('setting.password');
|
// Route::get('/setting/password', 'SettingController@password')->name('setting.password');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
1
webpack.mix.js
vendored
1
webpack.mix.js
vendored
@ -16,6 +16,7 @@ mix.js('resources/assets/js/app.js', 'public/js')
|
|||||||
.js('resources/assets/js/home.js', 'public/js')
|
.js('resources/assets/js/home.js', 'public/js')
|
||||||
.js('resources/assets/js/user/stats.js', 'public/js/user')
|
.js('resources/assets/js/user/stats.js', 'public/js/user')
|
||||||
.js('resources/assets/js/setting/privacy.js', 'public/js/setting')
|
.js('resources/assets/js/setting/privacy.js', 'public/js/setting')
|
||||||
|
.js('resources/assets/js/setting/deactivate.js', 'public/js/setting')
|
||||||
.ts('resources/assets/js/checkin.ts', 'public/js')
|
.ts('resources/assets/js/checkin.ts', 'public/js')
|
||||||
.sass('resources/assets/sass/app.scss', 'public/css')
|
.sass('resources/assets/sass/app.scss', 'public/css')
|
||||||
.autoload({
|
.autoload({
|
||||||
|
Loading…
Reference in New Issue
Block a user