как перенаправить на домашнюю страницу после входа в angular

#angular

#angular

Вопрос:

Я не знаю, почему моя панель навигации отображается также на моей странице входа в систему. Во-вторых, когда я вхожу в систему, я получаю токен и могу сохранить его в своем localstorage , но, тем не менее, он не перенаправляет меня на первую страницу, теперь я собираюсь написать, что я сделал, вот мой module.ts.

 RouterModule.forRoot([                       
   {path:'',component:LoginComponent},
   {path:'app-events',component:EventsComponent},
   {path:'app-turbine-comparison',component:TurbineComparisonComponent}
])
  

и вот моя функция входа в систему:

 signIn(credntials){
  this.authaervice.login(credntials)
  .subscribe(result=>{  
    if(result){
      localStorage.setItem('token',result.toString()); 
      this.router.navigate(['/']);
    }
    else
      this.invalidLogin=true;
   })
}
  

мой app.html:

    <nav>my nabvar stuff</nav>
 
  <router-outlet></router-outlet>
  

Моя панель навигации находится перед маршрутизатором-розеткой

Комментарии:

1. Пожалуйста, подробнее расскажите о том, что происходит и что вам нужно сделать, а также поделитесь своим app.component.html если возможно,

2. Я бы не рекомендовал хранить токен в localStorage. Любой скрипт, который вы включаете на свою веб-страницу, может читать localStorage для вашего сайта. Попробуйте вместо этого использовать аутентификацию cookie для своего веб-сайта.

3. @Pieterjan извините, я не понял, в чем проблема с localstorage

4. Каждый скрипт, который вы включаете на свою веб-страницу, может читать localStorage для вашего сайта. Итак, если вы используете Youtube iframe_api.js на своем веб-сайте, этот скрипт может прочитать localStorage для вашего сайта для посетителя. Что позволяет украсть JWT, возможно, передать его на сервер в России и выполнять запросы от имени посетителей. Теперь, с другой стороны, с аутентификацией cookie скрипту даже не нужно извлекать какую-либо информацию для выполнения аутентифицированных запросов, но это все равно более безопасно, чем просто хранить JWT в localstorage. Продолжение…

5. Таким образом, наилучшим подходом является использование комбинации аутентификации с использованием файлов cookie (проверенный механизм аутентификации для веб-приложений) и использование недолговечного токена CSRF для защиты от атак CSRF. Я уже прочитал следующую документацию angular , которая охватывает угловую сторону защиты CSRF, но я все еще изучаю этот материал сам.

Ответ №1:

Какая у вас домашняя страница? У вас нет домашней страницы в вашем маршрутизаторе, и все же вы переходите по ‘/’ при успешном входе в систему, что снова перенаправляет вас на страницу входа, определенную здесь :

 {path:'',component:LoginComponent},
  

Ваша панель навигации отображается на вашей странице входа в систему, потому что она находится за пределами вашего маршрутизатора, поэтому она будет отображаться на каждой странице.
В вашем компоненте приложения вы можете просто прочитать токен из localstorage и отобразить навигационный компонент только при наличии действительного токена :

 <nav *ngIf="token">my nabvar stuff</nav>
 
<router-outlet></router-outlet>
  

И в вашем app.component.ts ->

 token: string;

ngOnInit(){
    this.token = this.readToken();
}

readToken(): string {
    return localStorage.getItem('token');
}