update routing client
This commit is contained in:
parent
d7b7bc7be0
commit
218b2de59a
18 changed files with 377 additions and 148 deletions
16
client/src/app/core/services/jwt.service.ts
Normal file
16
client/src/app/core/services/jwt.service.ts
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class JwtService {
|
||||
getToken(): string | null {
|
||||
return window.localStorage['jwtToken'];
|
||||
}
|
||||
|
||||
saveToken(token: string): void {
|
||||
window.localStorage['jwtToken'] = token;
|
||||
}
|
||||
|
||||
destroyToken(): void {
|
||||
window.localStorage.removeItem('jwtToken');
|
||||
}
|
||||
}
|
||||
81
client/src/app/core/services/user.service.ts
Normal file
81
client/src/app/core/services/user.service.ts
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import {
|
||||
BehaviorSubject,
|
||||
Observable,
|
||||
distinctUntilChanged,
|
||||
map,
|
||||
tap,
|
||||
} from 'rxjs';
|
||||
import { User } from '../models/user.model';
|
||||
import { Router } from '@angular/router';
|
||||
import { JwtService } from './jwt.service';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class UserService {
|
||||
private currnetUserSubject = new BehaviorSubject<User | null>(null);
|
||||
public currentUser = this.currnetUserSubject
|
||||
.asObservable()
|
||||
.pipe(distinctUntilChanged());
|
||||
|
||||
public isAuthenticated = this.currentUser.pipe(
|
||||
map((user) => {
|
||||
return user !== null;
|
||||
})
|
||||
);
|
||||
|
||||
constructor(
|
||||
private readonly http: HttpClient,
|
||||
private readonly router: Router,
|
||||
private readonly jwtService: JwtService
|
||||
) {}
|
||||
|
||||
login(credentials: {
|
||||
email: string;
|
||||
password: string;
|
||||
}): Observable<{ user: User }> {
|
||||
return this.http
|
||||
.post<{ user: User }>('/api/users/login', credentials)
|
||||
.pipe(tap(({ user }) => this.setAuth(user)));
|
||||
}
|
||||
|
||||
register(credentials: {
|
||||
username: string;
|
||||
email: string;
|
||||
password: string;
|
||||
}): Observable<{ user: User }> {
|
||||
return this.http
|
||||
.post<{ user: User }>('/api/users', { user: credentials })
|
||||
.pipe(tap(({ user }) => this.setAuth(user)));
|
||||
}
|
||||
|
||||
logout(): void {
|
||||
this.purgeAuth();
|
||||
void this.router.navigate(['/login']);
|
||||
}
|
||||
|
||||
getCurrentUser(): Observable<{ user: User }> {
|
||||
return this.http.get<{ user: User }>('/api/user').pipe(
|
||||
tap({
|
||||
next: ({ user }) => this.setAuth(user),
|
||||
error: () => this.purgeAuth(),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
update(user: Partial<User>): Observable<{ user: User }> {
|
||||
return this.http
|
||||
.put<{ user: User }>('/api/user', { user })
|
||||
.pipe(tap(({ user }) => this.currnetUserSubject.next(user)));
|
||||
}
|
||||
|
||||
setAuth(user: User): void {
|
||||
this.jwtService.saveToken(user.token);
|
||||
void this.currnetUserSubject.next(user);
|
||||
}
|
||||
|
||||
purgeAuth(): void {
|
||||
this.jwtService.destroyToken();
|
||||
this.currnetUserSubject.next(null);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue