Получить токен из заголовка?
Допустим, у меня есть приложение маршрутизации-routing.module.ts
onst appRoutes: Routes = [ { path: 'login/:id', canActivate: [AuthGuard], children: [] }, { path: '', canActivateChild: [AuthGuard], children: [ { path: '', redirectTo: '/courses', pathMatch: 'full' }, { path: 'courses', component: CourseListComponent, pathMatch: 'full'}, { path: 'courses/:courseId', component: CourseDetailComponent, pathMatch: 'full' }, { path: 'courses/:courseId/unit/:unitId', component: CoursePlayComponent, children: [ { path: '', component: CourseListComponent }, { path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} }, { path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'} } ]} ]}, { path: '**', component: PageNotFoundComponent, pathMatch: 'full' }];
И АВТ.guard.ts
export class AuthGuard implements CanActivate , CanActivateChild { constructor(private authUserService: AuthUserService, private router: Router) { } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> { // save the id from route snapshot const id = +route.params.id; // if you try to logging with id if (id) { this.router.navigate(["/courses"]); return this.authUserService.login(id); } // if you already logged and just navigate between pages else if (this.authUserService.isLoggedIn()) return true; else { this.router.navigate(["/page_not_found"]); return false; } } canActivateChild(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> { return this.canActivate(route, state); } }
аутентификации пользователей.обслуживание.ТС
import { catchError, groupBy } from 'rxjs/operators'; import { UserService } from './user.service'; import { IUser } from './user'; @Injectable() export class AuthUserService implements OnDestroy { private user: IUser; private errorMessage: string; constructor(private userService: UserService) { } // store the session and call http get login(id: number) { return this.userService.getUser(id).pipe( map((user) => { this.user = user; localStorage.setItem('user', JSON.stringify(this.user)); localStorage.setItem('token', 'JWT'); return true; }), catchError((error) => { this.errorMessage = <any>error; return of(false); }) ); } isLoggedIn() { return !!localStorage.getItem('token'); } ngOnDestroy() { localStorage.removeItem('user'); localStorage.removeItem('token'); } }
В моем приложении есть много страниц. Все должны войти в систему, но это нужно только один раз. Этого достаточно. Мой вопрос заключается в том, что если я нахожусь на другой странице, Как получить токен, чтобы проверить, уже ли я вошел в систему?
Что я уже пробовал:
login(email:string, password:string) { return this.httpClient.post<{access_token: string}>('http://www.your-server.com/auth/login', {email, password}).pipe(tap(res => { localStorage.setItem('access_token', res.access_token); })) }