This commit is contained in:
baodev0
2026-06-22 09:55:11 +07:00
parent 0c436153c6
commit 776b1a6807
12 changed files with 491 additions and 10 deletions
@@ -4,12 +4,14 @@ namespace App\Http\Controllers\Api\Client;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\Client\ClientAuthRequest;
use App\Http\Requests\Api\Client\ClientChangePasswordRequest;
use App\Http\Requests\Api\Client\ClientRegisterRequest;
use App\Http\Requests\Api\Client\ClientUpdateRequest;
use App\Http\Resources\Api\Client\ClientResource;
use App\Services\ActivityLogger;
use App\Services\Api\Client\ClientAuthService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
@@ -307,6 +309,68 @@ class ClientController extends Controller
}
}
public function forgotPassword(Request $request)
{
$request->validate([
'email' => ['required', 'email', 'max:255'],
]);
$email = strtolower(trim((string) $request->input('email')));
$customer = \App\Models\Customer::whereRaw('LOWER(email) = ?', [$email])->first();
if (! $customer) {
// Do not disclose whether the email exists.
return response()->json([
'error' => false,
'message' => 'Nếu email tồn tại, mật khẩu mới đã được gửi đến hộp thư của bạn.',
]);
}
$alphabet = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!@#$%^&*';
$newPassword = '';
$max = strlen($alphabet) - 1;
for ($i = 0; $i < 16; $i++) {
$newPassword .= $alphabet[random_int(0, $max)];
}
try {
\Illuminate\Support\Facades\DB::beginTransaction();
$customer->password = Hash::make($newPassword);
$customer->save();
\Illuminate\Support\Facades\Mail::to($customer->email)->send(
new \App\Mail\Customer\PasswordResetByAdmin([
'fullname' => $customer->fullname,
'email' => $customer->email,
'password' => $newPassword,
])
);
$this->activityLogger->log(
event: 'password_forgot',
logName: 'Customer',
description: "Customer {$customer->email} yêu cầu cấp lại mật khẩu",
subject: $customer,
);
\Illuminate\Support\Facades\DB::commit();
} catch (\Throwable) {
\Illuminate\Support\Facades\DB::rollBack();
return response()->json([
'error' => true,
'message' => 'Không thể gửi email, vui lòng thử lại sau.',
], 500);
}
return response()->json([
'error' => false,
'message' => 'Mật khẩu mới đã được gửi đến email của bạn.',
]);
}
public function update(ClientUpdateRequest $request)
{
$user = auth('client')->user();
@@ -335,4 +399,31 @@ class ClientController extends Controller
],
]);
}
public function changePassword(ClientChangePasswordRequest $request)
{
$user = auth('client')->user();
if (!Hash::check($request->input('current_password'), $user->password)) {
return response()->json([
'error' => true,
'message' => 'Mật khẩu hiện tại không chính xác',
], 422);
}
$user->password = bcrypt($request->input('password'));
$user->save();
$this->activityLogger->log(
event: 'password_change',
logName: 'Customer',
description: "Customer {$user->email} đã đổi mật khẩu",
subject: $user,
);
return response()->json([
'error' => false,
'message' => 'Đổi mật khẩu thành công',
]);
}
}