Use a functional `CanActivateFn` and return a `UrlTree` for unauthenticated users instead of imperatively navigating inside the guard: ```typescript import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { AuthService } from './auth.service'; export const authGuard: CanActivateFn = (_route, state) => { const auth = inject(AuthService); const router = inject(Router); return auth.isAuthenticated() ? true : router.createUrlTree(['/login'], { query...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill angular-security --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Angular Security?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-angular-security-e1bdcee5)More formats (shields.io, HTML) on the badges page.
# Protecting routes with Angular auth guards
Use a functional `CanActivateFn` and return a `UrlTree` for unauthenticated users instead of imperatively navigating inside the guard:
```typescript
import { inject } from '@angular/core';
import { CanActivateFn, Router } from '@angular/router';
import { AuthService } from './auth.service';
export const authGuard: CanActivateFn = (_route, state) => {
const auth = inject(AuthService);
const router = inject(Router);
return auth.isAuthenticated()
? true
: router.createUrlTree(['/login'], {
queryParams: { returnUrl: state.url },
});
};
```
Apply it to every sensitive route, including lazy-loaded protected areas:
```typescript
{
path: 'account',
canActivate: [authGuard],
loadComponent: () => import('./account.component').then(m => m.AccountComponent),
}
```
If authentication is asynchronous, return an `Observable<boolean | UrlTree>` or `Promise<boolean | UrlTree>` and fail closed while the session check is unresolved or fails. Add separate role/permission guards where appropriate, but keep authorization checks on the server for every protected API and operation; a browser guard can be bypassed. Do not treat client-side route protection as the security boundary. Use a secure server session, preferably via an `HttpOnly` cookie, and do not put auth tokens in `localStorage` or `sessionStorage`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!