|
|
@@ -20,6 +20,9 @@ export class AuthService {
|
|
|
//url api
|
|
|
private apiUrl = environment.apiUrl
|
|
|
|
|
|
+ private currentUserSubject: BehaviorSubject<User> = new BehaviorSubject<User>(null);
|
|
|
+ public currentUser: Observable<User> = this.currentUserSubject.asObservable();
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
@@ -70,15 +73,16 @@ export class AuthService {
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
- signWithGoogle(): Observable<any> {
|
|
|
-
|
|
|
- return this.http.get(`${this.apiUrl}/api/auth/google`).pipe(tap(data => {
|
|
|
- debugger;
|
|
|
- // store jwt token in local storage
|
|
|
- localStorage.setItem('jwt', data.token);
|
|
|
-
|
|
|
-
|
|
|
- }));
|
|
|
+ signInWithGoogle(): Observable<any> {
|
|
|
+ return this.http.get('/api/auth/google').pipe(
|
|
|
+ tap((data) => {
|
|
|
+ const token = data.token;
|
|
|
+ localStorage.setItem('token', JSON.stringify(token));
|
|
|
+ this.getCurrentUser().subscribe((user) => {
|
|
|
+ this.currentUserSubject.next(user);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
// login google
|
|
|
@@ -139,6 +143,14 @@ resetPassword(data): Observable<any> {
|
|
|
return localStorage.getItem('token') !== null;
|
|
|
}
|
|
|
|
|
|
+ getCurrentUser(): Observable<User> {
|
|
|
+ return this.http.get<User>('/api/auth/user').pipe(
|
|
|
+ tap((user) => {
|
|
|
+ this.currentUserSubject.next(user);
|
|
|
+ })
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
//logout
|
|
|
public logout() {
|
|
|
// remove token from local storage
|
|
|
@@ -155,17 +167,31 @@ resetPassword(data): Observable<any> {
|
|
|
|
|
|
// get info user
|
|
|
getUserInfo(): Observable<User> {
|
|
|
- debugger;
|
|
|
- let decodedToken : payloadToken = jwt_decode(this.tokenSubject.value.token);
|
|
|
- return this.http.get<User>(`${this.apiUrl}/api/users/${decodedToken.userId}`)
|
|
|
- .pipe(map(user => {
|
|
|
- // store user info in local storage
|
|
|
- localStorage.setItem('user', JSON.stringify(user));
|
|
|
- this.user_infoSubject.next(user);
|
|
|
- return user;
|
|
|
- }));
|
|
|
-
|
|
|
+ let token = this.tokenSubject.value.token;
|
|
|
+ if (token) {
|
|
|
+ // User is authenticated locally
|
|
|
+ let decodedToken: payloadToken = jwt_decode(token);
|
|
|
+ return this.http.get<User>(`${this.apiUrl}/api/users/${decodedToken.userId}`).pipe(
|
|
|
+ map(user => {
|
|
|
+ // Store user info in local storage
|
|
|
+ localStorage.setItem('user', JSON.stringify(user));
|
|
|
+ this.user_infoSubject.next(user);
|
|
|
+ return user;
|
|
|
+ })
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // User is authenticated via Google
|
|
|
+ return this.http.get<User>(`${this.apiUrl}/api/auth/google/userinfo`).pipe(
|
|
|
+ map(user => {
|
|
|
+ // Store user info in local storage
|
|
|
+ localStorage.setItem('user', JSON.stringify(user));
|
|
|
+ this.user_infoSubject.next(user);
|
|
|
+ return user;
|
|
|
+ })
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
|
|
|
openSnackBar(message: string) {
|
|
|
this.snackBar.openFromComponent(AlertMessageComponent, {
|