0% found this document useful (0 votes)
16 views

A Modifier tp6 Angular

The document defines an Angular authentication system including services for authentication, authorization, storage and interceptors. It provides services for user login, registration, logout and retrieving profile data. It also sets up routing and components for login, registration, profile and restricted views.

Uploaded by

gnaouisalah.a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

A Modifier tp6 Angular

The document defines an Angular authentication system including services for authentication, authorization, storage and interceptors. It provides services for user login, registration, logout and retrieving profile data. It also sets up routing and components for login, registration, profile and restricted views.

Uploaded by

gnaouisalah.a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

auth service:

import { Injectable } from '@angular/core';


import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';

const AUTH_API = 'http://localhost:8080/api/auth/';

const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};

@Injectable({
providedIn: 'root'
})
export class AuthService {

constructor(private http: HttpClient) { }

login(username: string, password: string): Observable<any> {


return this.http.post(
AUTH_API + 'signin',
{
username,
password,
},
httpOptions
);
}
register(username: string, email: string, password: string): Observable<any> {
return this.http.post(
AUTH_API + 'signup',
{
username,
email,
password,
},
httpOptions
);
}

logout(): Observable<any> {
return this.http.post(AUTH_API + 'signout', {}, httpOptions);
}

********************************http
inter:******************************************
import { HTTP_INTERCEPTORS, HttpEvent } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';

import { TokenStorageService } from '../_services/storage.service';


import { Observable } from 'rxjs';

// const TOKEN_HEADER_KEY = 'Authorization'; // for Spring Boot back-end


const TOKEN_HEADER_KEY = 'x-access-token'; // for Node.js Express back-end
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private token: TokenStorageService) { }

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {


let authReq = req;
const token = this.token.getToken();
if (token != null) {
// for Spring Boot back-end
authReq = req.clone({ headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' +
token) });

// for Node.js Express back-end


//authReq = req.clone({ headers: req.headers.set(TOKEN_HEADER_KEY, token) });
}
return next.handle(authReq);
}
}

export const authInterceptorProviders = [


{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
];

****************************storge service*************************************
import { Injectable } from '@angular/core';

const TOKEN_KEY = 'auth-token';


const USER_KEY = 'auth-user';

@Injectable({
providedIn: 'root'
})
export class TokenStorageService {
constructor() { }

signOut(): void {
window.sessionStorage.clear();
}

public saveToken(token: string): void {


window.sessionStorage.removeItem(TOKEN_KEY);
window.sessionStorage.setItem(TOKEN_KEY, token);
}

public getToken(): string | null {


return window.sessionStorage.getItem(TOKEN_KEY);
}

public saveUser(user: any): void {


window.sessionStorage.removeItem(USER_KEY);
window.sessionStorage.setItem(USER_KEY, JSON.stringify(user));
}

public getUser(): any {


const user = window.sessionStorage.getItem(USER_KEY);
if (user) {
return JSON.parse(user);
}
return {};
}
}

****************************************************app
module.ts**********************************************

import { NgModule } from '@angular/core';


import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';

import { AppRoutingModule } from './app-routing.module';


import { AppComponent } from './app.component';
import { LoginComponent } from './login/login.component';
import { RegisterComponent } from './register/register.component';
import { HomeComponent } from './home/home.component';
import { ProfileComponent } from './profile/profile.component';
import { BoardAdminComponent } from './board-admin/board-admin.component';
import { BoardModeratorComponent } from './board-moderator/board-
moderator.component';
import { BoardUserComponent } from './board-user/board-user.component';

import { authInterceptorProviders } from './_helpers/http.interceptor';

@NgModule({
declarations: [
AppComponent,
LoginComponent,
RegisterComponent,
HomeComponent,
ProfileComponent,
BoardAdminComponent,
BoardModeratorComponent,
BoardUserComponent
],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule,
HttpClientModule

],
providers: [authInterceptorProviders],
bootstrap: [AppComponent]
})
export class AppModule { }

**********************************************login
comp.ts************************************************

import { Component, OnInit } from '@angular/core';


import { AuthService } from '../_services/auth.service';
import { TokenStorageService } from '../_services/storage.service';

@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
form: any = {
username: null,
password: null
};
isLoggedIn = false;
isLoginFailed = false;
errorMessage = '';
roles: string[] = [];

constructor(private authService: AuthService, private storageService:


TokenStorageService) { }

ngOnInit(): void {
if (this.storageService.getToken()) {
this.isLoggedIn = true;
this.roles = this.storageService.getUser().roles;
}
}

onSubmit(): void {
const { username, password } = this.form;

this.authService.login(username, password).subscribe({
next: data => {
this.storageService.saveUser(data);

this.isLoginFailed = false;
this.isLoggedIn = true;
this.roles = this.storageService.getUser().roles;
this.reloadPage();
},
error: err => {
this.errorMessage = err.error.message;
this.isLoginFailed = true;
}
});
}

reloadPage(): void {
window.location.reload();
}

*****************************************************profile
comp*********************************************************
import { Component, OnInit } from '@angular/core';
import { TokenStorageService } from '../_services/storage.service';

@Component({
selector: 'app-profile',
templateUrl: './profile.component.html',
styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit {
currentUser: any;

constructor(private storageService: TokenStorageService) { }

ngOnInit(): void {
this.currentUser = this.storageService.getUser();
}

***************************************************app comp
ts***************************************************************

import { Component } from '@angular/core';


import { TokenStorageService } from './_services/storage.service';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
private roles: string[] = [];
isLoggedIn = false;
showAdminBoard = false;
showModeratorBoard = false;
username?: string;

constructor(private tokenStorageService: TokenStorageService) { }

ngOnInit(): void {
this.isLoggedIn = !!this.tokenStorageService.getToken();

if (this.isLoggedIn) {
const user = this.tokenStorageService.getUser();
this.roles = user.roles;

this.showAdminBoard = this.roles.includes('ROLE_ADMIN');
this.showModeratorBoard = this.roles.includes('ROLE_MODERATOR');

this.username = user.username;
}
}

logout(): void {
this.tokenStorageService.signOut();
window.location.reload();
}
}

You might also like