middleware('guest:frontend'); $this->middleware('signed')->only('showResetForm'); $this->middleware('throttle:6,1')->only('showResetForm'); } /** * Get the guard to be used during authentication. * * @return \Illuminate\Contracts\Auth\StatefulGuard */ protected function guard(): StatefulGuard { return Auth::guard('frontend'); } /** * Display the password reset view for the given token. * * If no token is present, display the link request form. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ public function showResetForm(Request $request): \Illuminate\Contracts\View\View { $token = $request->route()->parameter('token'); return view('theme::auth.passwords.reset')->with( ['token' => $token, 'email' => $request->email] ); } /** * Reset the given user's password. * * @param \App\Models\Customer $customer * @param string $password * @return void * @throws \Illuminate\Validation\ValidationException If something goes wrong. */ protected function resetPassword(\App\Models\Customer $customer, string $password): void { /** @var \LDC\LDCCRM\CrmApiV2 */ $crm = app('crmAPI'); try { if (!($crmCustomer = $crm->getCustomer($customer->hashcode))) { throw ValidationException::withMessages([ 'error' => trans('Changement impossible, compte inexistant.') ]); } $crmCustomer->password = $password; $crmCustomer->save(); } catch (\TypeError | CrmException | ApiErrorException $e) { report($e); throw ValidationException::withMessages([ 'error' => trans('Une erreur est survenue, merci de réessayer ultérieurement.') ]); } catch (ExceptionsValidationException $e) { throw ValidationException::withMessages([ 'password' => $e->getMessage() ]); } $customer->setRememberToken(Str::random(60)); $customer->save(); event(new PasswordReset($customer)); $this->guard()->login($customer); } /** * Get the post register / login redirect path. * * @return string */ public function redirectPath(): string { return $this->authLoggedRedirectPath(); } /** * Get the broker to be used during password reset. * * @return \Illuminate\Contracts\Auth\PasswordBroker */ public function broker(): PasswordBroker { return Password::broker('customers'); } }