From 27e6fcec20e1fe9753657f99e4935c33a91945e9 Mon Sep 17 00:00:00 2001
From: arieeefajar
Date: Fri, 24 Jan 2025 20:40:39 +0700
Subject: [PATCH] feat(auth): create two step verify page with func
---
.../Auth/RegisteredUserController.php | 9 ++-
.../Auth/TwoStepVerifyController.php | 42 ++++++++++++++
app/Mail/ActivationAccountMail.php | 58 +++++++++++++++++++
.../2014_10_12_000000_create_users_table.php | 4 ++
database/seeders/UsersSeeder.php | 6 +-
.../auth/activation-account-mail.blade.php | 16 +++++
.../auth/two-step-verifycation.blade.php | 33 +++++++----
routes/web.php | 2 +
8 files changed, 157 insertions(+), 13 deletions(-)
create mode 100644 app/Mail/ActivationAccountMail.php
create mode 100644 resources/views/auth/activation-account-mail.blade.php
diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php
index f0de034..d7e3ed8 100644
--- a/app/Http/Controllers/Auth/RegisteredUserController.php
+++ b/app/Http/Controllers/Auth/RegisteredUserController.php
@@ -3,14 +3,16 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
+use App\Mail\ActivationAccountMail;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
+use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
use Illuminate\View\View;
-use PhpParser\Node\Expr\FuncCall;
class RegisteredUserController extends Controller
{
@@ -54,16 +56,21 @@ public function store(Request $request)
return redirect()->back()->withInput();
}
+ $activationCode = Str::random(4);
+
DB::beginTransaction();
$user = new User();
$user->username = $request->username;
$user->name = $request->name;
$user->email = $request->email;
$user->password = Hash::make($request->password);
+ $user->activation_code = $activationCode;
+ $user->is_active = false;
try {
$user->save();
DB::commit();
+ Mail::to($request->email)->send(new ActivationAccountMail($user));
toast('Registrasi berhasil', 'success')->position('top')->autoclose(3000);
return redirect()->route('auth.two_step_verify', ['email' => $request->email]);
} catch (\Throwable $th) {
diff --git a/app/Http/Controllers/Auth/TwoStepVerifyController.php b/app/Http/Controllers/Auth/TwoStepVerifyController.php
index 0f95af0..ed06c37 100644
--- a/app/Http/Controllers/Auth/TwoStepVerifyController.php
+++ b/app/Http/Controllers/Auth/TwoStepVerifyController.php
@@ -3,7 +3,11 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
+use App\Mail\ActivationAccountMail;
+use App\Models\User;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Mail;
class TwoStepVerifyController extends Controller
{
@@ -11,4 +15,42 @@ public function create($email)
{
return view('auth.two-step-verifycation', compact('email'));
}
+
+ public function store(Request $request)
+ {
+ DB::beginTransaction();
+ try {
+ $user = User::where('email', $request->email)->first();
+ $userActivationCode = $user->activation_code;
+ $activationCodeRequest = $request->digit1 . $request->digit2 . $request->digit3 . $request->digit4;
+
+ if ($userActivationCode == $activationCodeRequest) {
+ $user->activation_code = null;
+ $user->is_active = 1;
+ $user->save();
+ DB::commit();
+ toast('Akun anda telah diaktifkan', 'success')->position('top')->autoclose(3000);
+ return redirect()->route('auth.login');
+ }
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ toast($th->getMessage(), 'error')->position('top')->autoclose(3000);
+ return redirect()->back();
+ }
+ }
+
+ public function resendEmail(Request $request)
+ {
+ DB::beginTransaction();
+ try {
+ $user = User::where('email', $request->email)->first();
+ Mail::to($user->email)->send(new ActivationAccountMail($user));
+ toast('Kode verifikasi telah dikirim', 'success')->position('top')->autoclose(3000);
+ return redirect()->route('auth.two_step_verify', ['email' => $request->email]);
+ } catch (\Throwable $th) {
+ DB::rollBack();
+ toast($th->getMessage(), 'error')->position('top')->autoclose(3000);
+ return redirect()->back();
+ }
+ }
}
diff --git a/app/Mail/ActivationAccountMail.php b/app/Mail/ActivationAccountMail.php
new file mode 100644
index 0000000..fe62c5d
--- /dev/null
+++ b/app/Mail/ActivationAccountMail.php
@@ -0,0 +1,58 @@
+user = $user;
+ }
+
+ /**
+ * Get the message envelope.
+ */
+ public function envelope(): Envelope
+ {
+ return new Envelope(
+ subject: 'Activation Account Mail',
+ );
+ }
+
+ /**
+ * Get the message content definition.
+ */
+ public function content(): Content
+ {
+ return new Content(
+ view: 'auth.activation-account-mail',
+ with: [
+ 'name' => $this->user->name,
+ 'activationCode' => $this->user->activation_code
+ ]
+ );
+ }
+
+ /**
+ * Get the attachments for the message.
+ *
+ * @return array
+ */
+ public function attachments(): array
+ {
+ return [];
+ }
+}
diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php
index 428af53..9442a05 100644
--- a/database/migrations/2014_10_12_000000_create_users_table.php
+++ b/database/migrations/2014_10_12_000000_create_users_table.php
@@ -4,6 +4,8 @@
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
+use function Laravel\Prompts\table;
+
return new class extends Migration
{
/**
@@ -18,6 +20,8 @@ public function up(): void
$table->string('email')->unique();
$table->string('password');
$table->enum('role', ['admin', 'user'])->default('user');
+ $table->string('activation_code')->nullable();
+ $table->boolean('is_active')->default(false);
$table->timestamps();
});
}
diff --git a/database/seeders/UsersSeeder.php b/database/seeders/UsersSeeder.php
index 93f12dc..facc9a3 100644
--- a/database/seeders/UsersSeeder.php
+++ b/database/seeders/UsersSeeder.php
@@ -20,14 +20,16 @@ public function run(): void
'name' => 'Admin Sage',
'email' => 'adminSage@gmail.com',
'password' => Hash::make('admin123'),
- 'role' => 'admin'
+ 'role' => 'admin',
+ 'is_active' => true
]),
User::create([
'username' => 'petugas',
'name' => 'Petugas Sage',
'email' => 'petugasSage@gmail.com',
'password' => Hash::make('petugas123'),
- 'role' => 'user'
+ 'role' => 'user',
+ 'is_active' => true
]),
];
}
diff --git a/resources/views/auth/activation-account-mail.blade.php b/resources/views/auth/activation-account-mail.blade.php
new file mode 100644
index 0000000..8b6e555
--- /dev/null
+++ b/resources/views/auth/activation-account-mail.blade.php
@@ -0,0 +1,16 @@
+
+
+
+
+ Kode Aktivasi
+
+
+
+ Halo, {{ $name }}
+ Berikut adalah kode aktivasi untuk akun Anda:
+ {{ $activationCode }}
+ Masukkan kode ini di aplikasi untuk mengaktifkan akun Anda.
+ Terima kasih!
+
+
+
diff --git a/resources/views/auth/two-step-verifycation.blade.php b/resources/views/auth/two-step-verifycation.blade.php
index ab25cf1..019a79f 100644
--- a/resources/views/auth/two-step-verifycation.blade.php
+++ b/resources/views/auth/two-step-verifycation.blade.php
@@ -76,14 +76,18 @@
class="fw-semibold">{{ $email }}
-
-
-
-
@@ -126,8 +133,13 @@ class="form-control form-control-lg bg-light border-light text-center"
-
Tidak menerima email ? Kirim ulang
+
@@ -159,6 +171,7 @@ class="mdi mdi-heart text-danger">
+ @include('sweetalert::alert')
diff --git a/routes/web.php b/routes/web.php
index 3e20c09..e5ae0b9 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -34,6 +34,8 @@
Route::controller(TwoStepVerifyController::class)->group(function () {
Route::get('/verifikasi-akun/{email}', 'create')->name('two_step_verify');
+ Route::post('/verifikasi-akun', 'store')->name('two_step_verify_post');
+ Route::post('/verifikasi-akun/resend', 'resendEmail')->name('two_step_verify_resend');
});
Route::controller(PasswordResetLinkController::class)->group(function () {