最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Guard flickers page then loads actual page - Stack Overflow

programmeradmin1浏览0评论
export const authorizedUserGuard: CanActivateFn = (route, state) => {
    console.log('guard call', route, state)
    const tokenService = inject(TokenStorageService);
    const router = inject(Router);
    let user = tokenService.getUser();
    let token = tokenService.getToken();
    if(!token || !user){
        console.log('user not logged in');
        tokenService.removeData();
        router.navigate(['/home', 'login']);
        return false;
    }
 
    return true;
    
};

Angular first loads home/login then immediately it loads actual route. I am using angular SSR. Note: token and user both variable has value and I am not getting any logs from if part in console.

return router.createUrlTree(['/home', 'login']) ;

Also has same problem.

export const authorizedUserGuard: CanActivateFn = (route, state) => {
    console.log('guard call', route, state)
    const tokenService = inject(TokenStorageService);
    const router = inject(Router);
    let user = tokenService.getUser();
    let token = tokenService.getToken();
    if(!token || !user){
        console.log('user not logged in');
        tokenService.removeData();
        router.navigate(['/home', 'login']);
        return false;
    }
 
    return true;
    
};

Angular first loads home/login then immediately it loads actual route. I am using angular SSR. Note: token and user both variable has value and I am not getting any logs from if part in console.

return router.createUrlTree(['/home', 'login']) ;

Also has same problem.

Share Improve this question edited Jan 30 at 10:27 Naren Murali 58.8k5 gold badges44 silver badges77 bronze badges asked Jan 30 at 9:00 ShriyankShriyank 697 bronze badges 3
  • Which page are you getting in the SSR response? – Chrillewoodz Commented Jan 30 at 9:26
  • First login page then immediately actual page. (Network tab shows content of login page) – Shriyank Commented Jan 30 at 9:54
  • This tells you that the server is unable to determine your authenticated state. Likely due to you storing the user/token in localstorage, which isn't available on the server. – Chrillewoodz Commented Jan 30 at 10:13
Add a comment  | 

1 Answer 1

Reset to default 1

When on the server, just make the guard return false.

export const authorizedUserGuard: CanActivateFn = (route, state) => {
    console.log('guard call', route, state)
    const tokenService = inject(TokenStorageService);
    const platformId = inject(PLATFORM_ID);
    const isServer = isPlatformServer(platformId); 
    if(isServer) { 
      return false; 
    }
    const router = inject(Router);
    let user = tokenService.getUser();
    let token = tokenService.getToken();
    if(!token || !user){
        console.log('user not logged in');
        tokenService.removeData();
        router.navigate(['/home', 'login']);
        return false;
    }
    return true;
};
发布评论

评论列表(0)

  1. 暂无评论