In NestJS, a Guard is a special class that decides if a request can continue to a route. The key method is canActivate, which receives the request context. Inside canActivate, you check conditions like if the user is logged in. If the check passes, return true to allow access. If not, return false to block. The execution flow starts when a request arrives, NestJS calls canActivate, and based on its boolean result, the route handler runs or not. This example shows canActivate checking if request.user exists. If yes, access is allowed; if no, access is denied. Guards can also return promises or observables for async checks. Understanding this flow helps protect routes easily.