validate( [ 'email' => 'required', 'password' => 'required' ], [ 'email' => [ 'required' => 'Vui lòng nhập Email' ], 'password' => [ 'required' => 'Vui lòng nhập Mật Khẩu' ] ] ); $customer = Customer::where('email', $request->email); if (!$customer) { return back()->withInput()->withErrors('Địa chỉ email không tồn tại'); } if ( auth('users')->attempt( ['email' => $request->email, 'password' => $request->password], $request->remember ) ) { if (auth('users')->user()->status == 2) { auth('users')->logout(); return back()->withInput()->withErrors('Vui lòng kích hoạt tài khoản để tiếp tục sử dụng dịch vụ.'); } if (auth('users')->user()->status == 0) { auth('users')->logout(); return back()->withInput()->withErrors('Tài khoản bị khoá, Vui lòng liên hệ admin để được hỗ trợ.'); } $request->session()->regenerate(); $token = \auth('users')->user()->createToken('access_token', ['*'], Carbon::now()->addDay())->plainTextToken; Cookie::queue('aut_accessToken', $token, 24 * 60); $this->customerLogRepository->create([ 'customer_id' => auth('users')->id(), 'client_ip' => $request->getClientIp(), 'agent' => $request->userAgent(), 'action' => 'Đăng nhập' ]); if (Cookie::has('prev_url') && Cookie::get('prev_url') !== route('home')) { Cookie::queue(Cookie::forget('prev_url')); return redirect(Cookie::get('prev_url')); } return redirect()->route('home')->with('success', 'Đăng nhập tài khoản thành công!'); } return back()->withInput()->withErrors('Thông tin đăng nhập không chính xác!'); } public function Logout() { $this->customerLogRepository->create([ 'customer_id' => auth('users')->id(), 'client_ip' => \request()->getClientIp(), 'agent' => \request()->userAgent(), 'action' => 'Đăng xuất' ]); Cookie::queue(Cookie::forget('aut_accessToken')); auth('users')->user()->tokens()->delete(); auth('users')->logout(); return redirect()->route('user.login')->with('success', 'Đăng xuất tài khoản thành công!'); } public function Information() { $title = "Thông tin tài khoản"; $customer = auth('users')->user(); return view("frontend.user.account", compact('title', 'customer')); } public function StoreInformation(UserStoreInformation $request) { $validated = $request->validated(); try { DB::beginTransaction(); $user = user(); $dataToUpdate = collect($validated)->except(['_token', '_method', 'email'])->toArray(); $path = 'uploads/customers/' . $user->id . '/documents'; $fileFields = ['front_cccd', 'back_cccd', 'avatar']; foreach ($fileFields as $field) { if ($request->hasFile($field)) { $file = $request->file($field); $filename = $field . '_' . $user->id . '_' . time() . '.' . $file->getClientOriginalExtension(); foreach (Storage::disk('public')->files($path) as $existingFile) { if (Str::startsWith(basename($existingFile), $field . '_')) { Storage::disk('public')->delete($existingFile); } } $file->storeAs($path, $filename, 'public'); $dataToUpdate[$field] = $path . '/' . $filename; } } Customer::find($user->id)->update($dataToUpdate); DB::commit(); return back()->with('success', 'Cập nhật thông tin tài khoản thành công'); } catch (Exception $exception) { DB::rollBack(); return back()->withInput()->withErrors(['update_error' => $exception->getMessage()]); } } public function updateNotification(Request $request) { $user = auth('users')->user(); $request->validate([ 'email_marketing' => 'boolean', 'receive_deposit' => 'boolean', ]); $user->update([ 'email_marketing' => $request->input('email_marketing', false), 'receive_deposit' => $request->input('receive_deposit', false), ]); return response()->json(['success' => true]); } public function Email() { $title = "Lịch sử Email"; return view("frontend.email", compact('title')); } public function ViewEmail(Request $request) { $validator = Validator::make( $request->all(), [ 'id' => 'required|numeric|not__in:0' ], [ 'id' => [ 'required' => 'Vui lòng chọn Email' ] ] ); if ($validator->fails()) { return back()->withErrors($validator); } $template = Mail::find($request->id); if ($template) { $title = $template->subject; return view("emails.render", compact('title', 'template')); } return back()->withErrors("Yêu cầu không hợp lệ"); } public function ChangePassword() { $title = "Thay đổi mật khẩu"; $breadcrumbs = $this->crums->add(__('Dashboard'), route('home'))->add(__('Bảo mật tài khoản')); return view("frontend.user.password", compact('title', 'breadcrumbs')); } public function StoreChangePassword(Request $request) { $validator = Validator::make( $request->all(), [ "password" => 'required', "new_password" => 'required', 'confirm_password' => 'required' ], [ "password" => [ 'required' => 'Vui lòng nhập mật khẩu!' ], "new_password" => [ 'required' => 'Vui lòng nhập mật khẩu mới' ], 'confirm_password' => [ 'required' => 'Vui lòng nhập lại mật khẩu mới' ] ] ); if ($validator->fails()) { return back()->withInput()->withErrors($validator); } if (!Hash::check($request->password, $request->user('users')->password)) { return back()->withInput()->withErrors("Mật khẩu cũ không chính xác"); } if ($request->new_password !== $request->confirm_password) { return back()->withInput()->withErrors("Nhập lại mật khẩu mới không chính xác"); } try { DB::beginTransaction(); Customer::find($request->user('users')->id)->update([ 'password' => Hash::make($request->new_password) ]); DB::commit(); } catch (Exception $exception) { DB::rollBack(); return back()->withInput()->withErrors($exception->getMessage()); } return back()->with('success', 'Thay đổi mật khẩu thành công!'); } public function Register() { return view("frontend.register", [ 'title' => 'Đăng ký tài khoản' ]); } public function RegisterStore(UserRegisterRequest $request) { try { $validator = $request->validated(); DB::beginTransaction(); $code = Helper::generateUniqueCode(); $id = Customer::insertGetId([ 'firstname' => $validator['firstname'], 'lastname' => $validator['lastname'], 'email' => $validator['email'], 'phone' => $validator['phone'], 'avatar' => '/images/avatar.png', 'email_hash' => $code, 'status' => 2, 'password' => Hash::make($validator['password']), 'created_at' => Carbon::now(), 'updated_at' => Carbon::now(), ]); $jobs = new CustomerRegister(1, $code, $validator['email'], $id); dispatch($jobs)->delay(now()->addSeconds(10)); DB::commit(); } catch (Exception $exception) { DB::rollBack(); return back()->withInput()->withErrors($exception->getMessage()); } return redirect()->route('user.login')->with('success', 'Đăng ký thành công. Vui lòng kiểm tra xác thực Email!'); } public function Verify(Request $request) { $validator = Validator::make( $request->all(), [ 'verify' => 'required', ], ['verify.required' => 'Yêu cầu không hợp lệ'] ); if ($validator->fails()) { return redirect()->route('user.login')->withErrors($validator); } $code = base64_decode(SignRSA::DecryptFunc($request->verify)); $customer = Customer::where('email_hash', 'LIKE', "%$code%")->first(); if (!$customer) { return redirect()->route('user.login')->withErrors('Yêu cầu không hợp lệ'); } if ($customer->status == 1 || $customer->status == 0) { return redirect()->route('user.login')->withErrors('Yêu cầu không hợp lệ'); } try { DB::beginTransaction(); $customer->update([ 'status' => 1, 'email_verify' => Carbon::now() ]); ModuleSnapshotLimit::create([ 'customer_id' => $customer->id, 'limit' => 1, 'used' => 0 ]); DB::commit(); } catch (Exception $exception) { DB::rollBack(); return redirect()->route('user.login')->withErrors($exception->getMessage()); } return redirect()->route('user.login')->with('success', 'Kích hoạt tài khoản thành công'); } public function Reset() { $title = "Quên mật khẩu"; return view("frontend.reset", compact('title')); } public function ResetStore(Request $request) { $request->validate( [ 'email' => 'required|email' ], [ 'email' => [ 'required' => 'Vui lòng nhập địa chỉ email!', 'email' => 'Định dạng email không hợp lệ' ] ] ); $user = Customer::where('email', $request->email)->first(); if (!$user) { return back()->withErrors('Không tìm thấy thông tin người dùng'); } $password = Str::random(10); try { DB::beginTransaction(); $user->update([ 'password' => Hash::make($password) ]); $data = [ 'company_name' => setting('setting.company'), 'company_logo' => setting('setting.logo'), 'password' => $password, ]; $jobs = new PasswordRecoverJob($data, $user); dispatch($jobs)->delay(now()->addSeconds(10)); DB::commit(); } catch (Exception $exception) { DB::rollBack(); return back()->withErrors($exception->getMessage()); } return redirect()->route('user.login')->with('success', "Thiết lập đặt lại mật khẩu thành công. Vui lòng kiểm tra email và thực hiện xác thực theo hướng dẫn."); } }