сценарий : здесь я создаю приложение, в котором в настоящее время у меня есть страница с именем информация о продуктах , где URL-адрес отправляется клиенту, и при нажатии на ссылку он может напрямую откройте эту конкретную страницу продукта и посмотрите информацию, и та же самая страница будет там в приложении.
проблема : здесь я защищаю маршруты с помощью Auth Guard, поэтому без регистрации пользователь не может доступ к странице. Если я отправил тот же URL-адрес страницы пользователю по электронной почте, он должен иметь возможность просматривать только страницу.
Итак, в моем приложении есть:
- страница входа
- страница продуктов
- страница информации о продуктах
Обычно, если пользователь входит в систему, эта страница будет видна, но когда администратор отправит URL-адрес как mobiledot.com / products-info на электронную почту пользователя, пользователь нажимает на нее, и приложение не хочет входить в систему и не хочет отображать информацию о выходе или других страницах только на этой странице c. ниже мой код:
router.module.ts
const routes: Routes = [
{ path: '', component: LoginComponent },
{ path: 'main/:role', component: MainComponent, canActivate: [RouteGuard] },
{ path: 'admin', component: AdminComponent},
{ path: 'user', component: userComponent,canActivate: [RouteGuard]}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: [RouteGuard]
})
export class AppRoutingModule { }
auth guard
@Injectable()
export class RouteGuard implements CanActivate {
constructor(private service: accessService, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
const isAllowed = this.service.getAuthenticated();
if (!isAllowed) {
this.router.navigate(['/']);
}
return isAllowed;
}
}
Так что я тоже подумал о некоторых вещах вроде если пользователь входит в приложение. Мой модуль маршрутизатора:
if(user loginin){
{ path: 'main/:role', component: MainComponent, canActivate: [RouteGuard] },
}
else {
{ path: 'main/:token', component: MainComponent },
ex: www.mobiledot.com/product-info?toke="ssdsdsdsdSDSD"
}
Возможно ли это или у нас есть другой способ?
Короче говоря, если администратор отправил тот же URL-адрес страницы в приложении, которое защищено защитниками авторизации, в пользователь по электронной почте, затем пользователь щелкнет ссылку и откроет страницу, и он не должен запрашивать логин.
Есть еще одна проблема , которая касается сохраненного токена в localstorage
. Итак, прежде чем двигаться, нужно ли нам очистить этот токен и разместить новый, чтобы он не перенаправлялся на главную страницу?