NIM_E31222518/app/Http/Controllers/Auth/VerificationController.php

101 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Str;
class VerificationController extends Controller
{
public function __construct()
{
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
public function show()
{
return View::make('auth.verify-email');
}
public function verify(Request $request, $token)
{
Log::info('Verification attempt started', [
'token' => $token,
'request_url' => $request->fullUrl(),
'request_method' => $request->method(),
'request_headers' => $request->headers->all()
]);
try {
// Cari user berdasarkan token
$user = User::where('verification_token', $token)->first();
if (!$user) {
Log::error('Invalid verification token', [
'token' => $token,
'request_url' => $request->fullUrl()
]);
return Redirect::to('/')->with('error', 'Token verifikasi tidak valid.');
}
Log::info('User found for verification', [
'user_id' => $user->id,
'email' => $user->email,
'is_verified' => $user->is_verified
]);
// Update status verifikasi
$user->is_verified = 1;
$user->verification_token = null; // Hapus token setelah digunakan
$user->save();
Log::info('Email verified successfully', [
'user_id' => $user->id,
'email' => $user->email,
'is_verified' => $user->is_verified
]);
// Login user
Auth::login($user);
return Redirect::to('/')->with('status', 'Email berhasil diverifikasi!');
} catch (\Exception $e) {
Log::error('Error during email verification', [
'token' => $token,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
return Redirect::to('/')->with('error', 'Terjadi kesalahan saat verifikasi email.');
}
}
public function resend(Request $request)
{
if ($request->user()->is_verified) {
return Redirect::to('/');
}
// Generate token baru
$token = Str::random(64);
$request->user()->verification_token = $token;
$request->user()->save();
// Kirim email dengan token baru
$verificationUrl = url("/email/verify/{$token}");
// Kirim email (gunakan sistem email yang sudah ada)
\Mail::send('emails.verify', ['url' => $verificationUrl], function($message) use ($request) {
$message->to($request->user()->email);
$message->subject('Verifikasi Email');
});
return Redirect::back()->with('status', 'Link verifikasi baru telah dikirim ke email Anda.');
}
}