phplaravelvue.jsvuetify.jsinertiajs

Method Illuminate\Auth\RequestGuard:: does not exist


The logout button doesn't work, it returns “Method Illuminate\Auth\RequestGuard::logout does not exist.” I checked everything seems to be correct, but it doesn't work.

route:

Route::middleware(["auth:sanctum"])->group(function(){
   Route::post("/logout", [UserController::class, "logout"])->name("logout");
});

userController:

public function logout(Request $request)
    {
        
        $request->user()->tokens()->delete();
        
        Auth::logout();
        
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        
        return redirect("/");
    }

Vue code:

<v-btn color="white" class="primary--text" type="submit" @click="logout" elevation="1">
   <v-icon left>mdi-logout</v-icon>
Logout
</v-btn>

logout() {
  this.isLoading = true;
  router.post('/logout', {}, { 
    onFinish: () => {
      this.isLoading = false;
    },
    onSuccess: () => {
      router.visit('/', { 
        replace: true,
        preserveState: false,
        only: [],
      });
    },
    onError: (errors) => {
      this.isLoading = false;
      this.showSnackbar('Logout failed', 'error');
      console.error('Logout Errors:', errors);
    },
  });
}

Solution

  • Method Illuminate\Auth\RequestGuard::logout does not exist.
    

    happens because you're calling Auth::logout() while using Sanctum with API tokens, which uses RequestGuard, and that guard doesn't have a logout() method.

    Explanation:

    1. Auth::logout() only works with session-based authentication (like web guard).

    2. You're using auth:sanctum, which uses token-based authentication.

    3. In Sanctum’s token-based auth, there’s no concept of “logging out” like session-based systems. Instead, you delete the token (which you're already doing with $request->user()->tokens()->delete()).

    Just remove Auth::logout() from your logout() method. Your token deletion and session invalidation are enough.

    public function logout(Request $request)
    {
        // Delete all tokens for the user
        $request->user()->tokens()->delete();
    
        // Invalidate session (only necessary if you mix token + session auth)
        $request->session()->invalidate();
        $request->session()->regenerateToken();
    
        return redirect('/');
    }