Skip to content

Commit f0757fd

Browse files
author
Sergey Matvyenko
committed
- add TokenInterceptor
- add fake auth service
1 parent 71caa2a commit f0757fd

File tree

7 files changed

+79
-13
lines changed

7 files changed

+79
-13
lines changed

src/app/app.component.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { Component } from '@angular/core';
2+
import { AuthService } from './services';
23

34
@Component({
45
selector: 'app-root',
56
template: '<router-outlet></router-outlet>'
67
})
78
export class AppComponent {
89
title = 'Newsfeed-App';
10+
11+
constructor(auth: AuthService) {
12+
13+
auth.login();
14+
}
915
}

src/app/app.module.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { HttpClientModule } from '@angular/common/http';
1+
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
22
import { FormsModule } from '@angular/forms';
33
import { BrowserModule } from '@angular/platform-browser';
44
import { NgModule } from '@angular/core';
55
import { AppComponent } from './app.component';
66
import { RootStoreModule } from './root-store';
7-
import { FeedMockDataService } from './services';
87
import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
98
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
109

@@ -14,6 +13,11 @@ import {CheckboxModule} from 'primeng/checkbox';
1413
import {DataScrollerModule} from 'primeng/datascroller';
1514
import {CarouselModule} from 'primeng/carousel';
1615
import {ProgressSpinnerModule} from 'primeng/progressspinner';
16+
import {MessagesModule} from 'primeng/messages';
17+
import {MessageModule} from 'primeng/message';
18+
19+
// services
20+
import { FeedMockDataService, FeedService, AuthService, TokenInterceptor } from './services';
1721

1822
// components
1923
import { FeedListComponent } from './components/feed-list/feed-list.component';
@@ -28,8 +32,6 @@ import { AuthorsListComponent } from './components/authors-list/authors-list.com
2832

2933

3034

31-
32-
3335
@NgModule({
3436
declarations: [
3537
AppComponent,
@@ -54,9 +56,19 @@ import { AuthorsListComponent } from './components/authors-list/authors-list.com
5456
DataScrollerModule,
5557
CarouselModule,
5658
CheckboxModule,
57-
ProgressSpinnerModule
59+
ProgressSpinnerModule,
60+
MessagesModule,
61+
MessageModule
62+
],
63+
providers: [
64+
{
65+
provide: HTTP_INTERCEPTORS,
66+
useClass: TokenInterceptor,
67+
multi: true
68+
},
69+
FeedService,
70+
AuthService
5871
],
59-
providers: [],
6072
bootstrap: [AppComponent]
6173
})
6274
export class AppModule { }

src/app/components/feed-list/feed-list.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--component html goes here -->
2-
<div *ngIf="!(isLoading$ | async)">
2+
<div *ngIf="!(isLoading$ | async) && !(error$ | async)">
33

44
<!-- Filter menu -->
55
<app-feed-menu
@@ -27,6 +27,6 @@
2727
</div>
2828

2929
<!-- errors -->
30-
<div *ngIf="(error$ | async)">
31-
An error occurred: {{(error$ | async) | json}}
32-
</div>
30+
<div *ngIf="(error$ | async)" class="center">
31+
<p-message severity="error" style="font-size: 18px; font-weight: 600;" text="{{(error$ | async).message}}"></p-message>
32+
</div>

src/app/services/auth.service.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Injectable, OnDestroy, OnInit, ChangeDetectorRef } from '@angular/core';
2+
import { HttpClient, HttpHeaders } from '@angular/common/http';
3+
4+
@Injectable()
5+
export class AuthService {
6+
7+
8+
public login(): void {
9+
10+
this.setSession({accessToken: 'some_fake_token' });
11+
}
12+
13+
private setSession(authResult): void {
14+
15+
// Set fake token
16+
localStorage.setItem('access_token', authResult.accessToken);
17+
}
18+
}

src/app/services/feed.service.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import { map } from 'rxjs/operators';
55
import { ContentModel } from '../models';
66
import { environment } from '../../environments/environment';
77

8-
@Injectable({
9-
providedIn: 'root'
10-
})
8+
@Injectable()
119
export class FeedService {
1210

1311
private baseUrl: String;

src/app/services/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
export * from './feed.service';
22
export * from './feed-mock.service';
3+
export * from './auth.service';
4+
export * from './token.interceptor';

src/app/services/token.interceptor.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Injectable } from '@angular/core';
2+
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
3+
import { HttpResponse } from '@angular/common/http';
4+
import { HttpErrorResponse } from '@angular/common/http';
5+
import { Observable } from 'rxjs';
6+
import { AuthService } from './auth.service';
7+
8+
9+
@Injectable()
10+
export class TokenInterceptor implements HttpInterceptor {
11+
12+
constructor() {}
13+
14+
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
15+
16+
const token: string = localStorage.getItem('access_token');
17+
console.log(token);
18+
console.log(req);
19+
20+
if (token === null) {
21+
return next.handle(req);
22+
} else {
23+
const authHeader = 'Bearer ' + token;
24+
const authReq = req.clone({ headers: req.headers.set('Authorization', authHeader) });
25+
console.log(authReq);
26+
return next.handle(authReq);
27+
}
28+
}
29+
30+
}

0 commit comments

Comments
 (0)