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) { $user->notify(new ResetPasswordNotification($token, $frontendUrl)); } ); // 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); } }