token = $token; $invite = HouseholdInvite::with('household')->where('token', $token)->first(); if (! $invite || $invite->isExpired() || $invite->isAccepted()) { $this->invalid = true; return; } $this->invite = $invite; $existingUser = User::where('email', $invite->email)->first(); if ($existingUser && auth()->check() && auth()->id() === $existingUser->id) { $this->accept(); } } public function accept(): void { if (! $this->invite || ! auth()->check()) { return; } $user = auth()->user(); if ($user->email !== $this->invite->email) { $this->invalid = true; return; } $user->households()->syncWithoutDetaching([ $this->invite->household_id => ['role' => $this->invite->role], ]); $this->invite->update(['accepted_at' => now()]); $user->forceFill(['current_household_id' => $this->invite->household_id])->save(); $this->redirect(route('dashboard', absolute: false), navigate: true); } public function render() { return view('livewire.household.accept-invite'); } }