validate([ 'email' => ['required', 'email'], 'app' => ['required', 'in:app,portal,admin'], ]); $frontendUrls = [ 'admin' => config('app.frontend_admin_url'), 'app' => config('app.frontend_app_url'), 'portal' => config('app.frontend_portal_url'), ]; $frontendUrl = $frontendUrls[$request->input('app')]; Password::sendResetLink( ['email' => strtolower($request->email)], function (User $user, string $token) use ($frontendUrl) { $organisation = $user->organisations()->first(); $this->emailService->send( type: EmailTemplateType::PASSWORD_RESET, recipientEmail: $user->email, recipientName: $user->first_name . ' ' . $user->last_name, actionUrl: $frontendUrl . '/reset-password?token=' . $token . '&email=' . urlencode($user->email), organisation: $organisation, userId: $user->id, ); } ); // Always return success (don't leak whether email exists) return $this->success( message: 'Als dit e-mailadres bij ons bekend is, ontvang je een link om je wachtwoord te herstellen.' ); } public function resetPassword(Request $request): JsonResponse { $request->validate([ 'token' => ['required'], 'email' => ['required', 'email'], 'password' => ['required', 'confirmed', PasswordRule::min(8)->mixedCase()->numbers()], ]); $status = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function (User $user, string $password) { $user->forceFill(['password' => Hash::make($password)])->save(); // Revoke all existing tokens (force re-login everywhere) $user->tokens()->delete(); activity() ->causedBy($user) ->performedOn($user) ->log('user.password_reset'); } ); if ($status === Password::PASSWORD_RESET) { return $this->success(message: 'Je wachtwoord is succesvol gewijzigd. Je kunt nu inloggen.'); } return $this->error(__($status), 422); } }