Skip to content

Commit d1b6fa0

Browse files
author
Bernardo
committed
Using a single auth service
1 parent 484e07c commit d1b6fa0

10 files changed

Lines changed: 51 additions & 88 deletions

File tree

src/app/authentication/authentication.module.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ import { CommonModule } from '@angular/common';
22
import { HTTP_INTERCEPTORS } from '@angular/common/http';
33
import { NgModule } from '@angular/core';
44
import { AuthenticationInterceptor } from './interceptor/authentication.interceptor';
5-
import { AuthenticationService } from './service/authentication.service';
65

76
@NgModule({
87
declarations: [],
98
imports: [
109
CommonModule
1110
],
1211
providers: [
13-
AuthenticationService,
1412
{ provide: HTTP_INTERCEPTORS, useClass: AuthenticationInterceptor, multi: true }
1513
]
1614
})

src/app/authentication/guard/authenticated.guard.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Injectable } from '@angular/core';
2-
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
3-
import { Observable } from 'rxjs';
2+
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
43
import { AuthenticationService } from '../service/authentication.service';
54

65
@Injectable({
@@ -14,7 +13,7 @@ export class AuthenticatedGuard implements CanActivate {
1413
) { }
1514

1615
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
17-
const user = this.authenticationService.userValue;
16+
const user = this.authenticationService.getUser().token;
1817
if (user) {
1918
// logged in so return true
2019
return true;

src/app/authentication/interceptor/authentication.interceptor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export class AuthenticationInterceptor implements HttpInterceptor {
1414
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
1515
let authReq;
1616

17-
const token = this.authenticationService.getToken();
17+
const token = this.authenticationService.getUser().token;
1818

1919
if (token === null) {
2020
authReq = request;

src/app/authentication/model/user.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export class User {
22
username: string = '';
33
password: string = '';
44
logged: boolean = false;
5+
token: string | null = null;
56
}
Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,46 @@
1+
import { HttpClient } from '@angular/common/http';
12
import { Injectable } from '@angular/core';
3+
import { environment } from '@environments/environment';
4+
import { Observable } from 'rxjs';
5+
import { map } from 'rxjs/operators';
6+
import { User } from '../model/user';
27

3-
@Injectable()
8+
@Injectable({
9+
providedIn: 'root',
10+
})
411
export class AuthenticationService {
512

6-
private tokenId: string = 'access_token';
7-
8-
constructor() { }
13+
public user: User = new User();
14+
15+
constructor(
16+
private http: HttpClient
17+
) { }
18+
19+
login(username: string, password: string): Observable<User> {
20+
return this.http.post<User>(`${environment.apiUrl}/auth/login/`, { username, password })
21+
.pipe(map(user => {
22+
let loggedUser;
23+
24+
if (user) {
25+
loggedUser = user;
26+
const token = window.btoa(username + ':' + password);
27+
loggedUser.logged = true;
28+
loggedUser.token = token;
29+
} else {
30+
loggedUser = new User();
31+
}
32+
33+
this.user = loggedUser;
34+
return this.user;
35+
}));
36+
}
37+
38+
logout() {
39+
this.user = new User();
40+
}
941

10-
getToken(): string | null {
11-
return localStorage.getItem(this.tokenId);
42+
getUser(): User {
43+
return this.user;
1244
}
1345

1446
}

src/app/login/login-form/login-form.component.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Component, OnInit } from '@angular/core';
22
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
33
import { ActivatedRoute, Router } from '@angular/router';
4-
import { LoginService } from '../service/login.service';
4+
import { AuthenticationService } from '@app/authentication/service/authentication.service';
55

66
@Component({
7-
selector: 'login-form',
7+
selector: 'dahs-login-form',
88
templateUrl: './login-form.component.html',
99
styleUrls: ['./login-form.component.sass']
1010
})
@@ -20,10 +20,10 @@ export class LoginFormComponent implements OnInit {
2020
private formBuilder: FormBuilder,
2121
private route: ActivatedRoute,
2222
private router: Router,
23-
private loginService: LoginService
23+
private authenticationService: AuthenticationService
2424
) {
2525
// redirect to home if already logged in
26-
if (this.loginService.user.logged) {
26+
if (this.authenticationService.getUser().logged) {
2727
this.router.navigate(['/']);
2828
}
2929

@@ -50,7 +50,7 @@ export class LoginFormComponent implements OnInit {
5050
}
5151

5252
this.loading = true;
53-
this.loginService.login(this.f['username'].value, this.f['password'].value)
53+
this.authenticationService.login(this.f['username'].value, this.f['password'].value)
5454
.subscribe({
5555
next: user => {
5656
this.loading = false;

src/app/login/login.module.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
44
import { AuthenticationModule } from '@app/authentication/authentication.module';
55
import { LoginFormComponent } from './login-form/login-form.component';
66
import { LoginRoutingModule } from './login-routing.module';
7-
import { LoginService } from './service/login.service';
87
import { LogoutButtonComponent } from './logout-button/logout-button.component';
98

109

@@ -21,9 +20,6 @@ import { LogoutButtonComponent } from './logout-button/logout-button.component';
2120
FormsModule,
2221
ReactiveFormsModule
2322
],
24-
providers: [
25-
LoginService
26-
],
2723
exports: [
2824
LogoutButtonComponent
2925
]
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { Component } from '@angular/core';
2-
import { LoginService } from '../service/login.service';
2+
import { AuthenticationService } from '@app/authentication/service/authentication.service';
33

44
@Component({
5-
selector: 'logout-button',
5+
selector: 'dahs-logout-button',
66
templateUrl: './logout-button.component.html',
77
styleUrls: ['./logout-button.component.css']
88
})
99
export class LogoutButtonComponent {
1010

11-
constructor(private loginService: LoginService) { }
11+
constructor(private authenticationService: AuthenticationService) { }
1212

1313
logout(){
14-
this.loginService.logout();
14+
this.authenticationService.logout();
1515
}
1616

1717
}

src/app/login/service/login.service.spec.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/app/login/service/login.service.ts

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)