197 lines
7.0 KiB
PHP
197 lines
7.0 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;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
class ForgotPasswordController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('guest');
|
|
}
|
|
|
|
public function showLinkRequestForm()
|
|
{
|
|
return View::make('auth.passwords.email');
|
|
}
|
|
|
|
public function sendResetLinkEmail(Request $request)
|
|
{
|
|
Log::info('Reset Password Request Started', [
|
|
'email' => $request->email,
|
|
'request_url' => $request->fullUrl(),
|
|
'request_method' => $request->method()
|
|
]);
|
|
|
|
try {
|
|
$request->validate([
|
|
'email' => ['required', 'email', 'exists:users,email'],
|
|
]);
|
|
|
|
$user = User::where('email', $request->email)->first();
|
|
|
|
if (!$user) {
|
|
Log::error('Email not found', [
|
|
'email' => $request->email
|
|
]);
|
|
return Redirect::back()->withErrors([
|
|
'email' => ['Email tidak ditemukan dalam sistem kami.'],
|
|
]);
|
|
}
|
|
|
|
// Generate token reset password
|
|
$token = Str::random(64);
|
|
$expiresAt = now()->addHours(24);
|
|
|
|
Log::info('Generated reset token', [
|
|
'email' => $user->email,
|
|
'token' => $token,
|
|
'expires_at' => $expiresAt
|
|
]);
|
|
|
|
// Update user dengan token baru
|
|
$user->reset_password_token = $token;
|
|
$user->reset_password_expires_at = $expiresAt;
|
|
$user->save();
|
|
|
|
// Verifikasi update berhasil
|
|
$userAfterUpdate = User::where('email', $user->email)
|
|
->where('reset_password_token', $token)
|
|
->first();
|
|
|
|
Log::info('Update Result', [
|
|
'token_stored' => $userAfterUpdate ? $userAfterUpdate->reset_password_token : null,
|
|
'expires_at_stored' => $userAfterUpdate ? $userAfterUpdate->reset_password_expires_at : null
|
|
]);
|
|
|
|
// Kirim email dengan link reset password
|
|
Mail::send('auth.passwords.reset-link', ['token' => $token, 'email' => $user->email], function($message) use($user) {
|
|
$message->to($user->email);
|
|
$message->subject('Reset Password - DJEE Elektronik');
|
|
});
|
|
|
|
return Redirect::back()->with('status', 'Link reset password telah dikirim ke email Anda. Silakan cek inbox atau folder spam Anda.');
|
|
} catch (\Exception $e) {
|
|
Log::error('Error during password reset request', [
|
|
'email' => $request->email,
|
|
'error' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString()
|
|
]);
|
|
return Redirect::back()->withErrors(['email' => 'Terjadi kesalahan saat memproses permintaan reset password.']);
|
|
}
|
|
}
|
|
|
|
public function showResetForm($token, $email)
|
|
{
|
|
Log::info('Reset Password Form Access', [
|
|
'email' => $email,
|
|
'token' => $token,
|
|
'current_time' => now(),
|
|
'request_url' => request()->fullUrl()
|
|
]);
|
|
|
|
try {
|
|
$user = User::where('email', $email)
|
|
->where('reset_password_token', $token)
|
|
->where('reset_password_expires_at', '>', now())
|
|
->first();
|
|
|
|
Log::info('Reset Password Query Result', [
|
|
'user_found' => $user ? true : false,
|
|
'expires_at' => $user ? $user->reset_password_expires_at : null,
|
|
'stored_token' => $user ? $user->reset_password_token : null
|
|
]);
|
|
|
|
if (!$user) {
|
|
Log::error('Invalid or expired reset token', [
|
|
'email' => $email,
|
|
'token' => $token
|
|
]);
|
|
return Redirect::route('password.request')
|
|
->withErrors(['email' => 'Link reset password tidak valid atau sudah kadaluarsa.']);
|
|
}
|
|
|
|
return View::make('auth.passwords.reset', [
|
|
'token' => $token,
|
|
'email' => $email
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error showing reset form', [
|
|
'email' => $email,
|
|
'token' => $token,
|
|
'error' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString()
|
|
]);
|
|
return Redirect::route('password.request')
|
|
->withErrors(['email' => 'Terjadi kesalahan saat memproses permintaan reset password.']);
|
|
}
|
|
}
|
|
|
|
public function reset(Request $request)
|
|
{
|
|
Log::info('Reset Password Attempt', [
|
|
'email' => $request->email,
|
|
'token' => $request->token,
|
|
'current_time' => now(),
|
|
'request_url' => $request->fullUrl()
|
|
]);
|
|
|
|
try {
|
|
$request->validate([
|
|
'token' => 'required',
|
|
'email' => 'required|email',
|
|
'password' => 'required|min:8|confirmed',
|
|
]);
|
|
|
|
$user = User::where('email', $request->email)
|
|
->where('reset_password_token', $request->token)
|
|
->where('reset_password_expires_at', '>', now())
|
|
->first();
|
|
|
|
Log::info('Reset Password Query Result', [
|
|
'user_found' => $user ? true : false,
|
|
'expires_at' => $user ? $user->reset_password_expires_at : null
|
|
]);
|
|
|
|
if (!$user) {
|
|
Log::error('Invalid or expired reset token during reset', [
|
|
'email' => $request->email,
|
|
'token' => $request->token
|
|
]);
|
|
return Redirect::back()->withErrors(['email' => 'Link reset password tidak valid atau sudah kadaluarsa.']);
|
|
}
|
|
|
|
// Update password dan hapus token
|
|
$user->password = Hash::make($request->password);
|
|
$user->reset_password_token = null;
|
|
$user->reset_password_expires_at = null;
|
|
$user->save();
|
|
|
|
Log::info('Password reset successful', [
|
|
'email' => $user->email
|
|
]);
|
|
|
|
return Redirect::route('login')
|
|
->with('status', 'Password Anda berhasil diubah. Silakan login dengan password baru Anda.');
|
|
} catch (\Exception $e) {
|
|
Log::error('Error during password reset', [
|
|
'email' => $request->email,
|
|
'error' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString()
|
|
]);
|
|
return Redirect::back()->withErrors(['email' => 'Terjadi kesalahan saat mereset password.']);
|
|
}
|
|
}
|
|
}
|