From f25488370a741b49a5ef600bfb549c0ce6543cfb Mon Sep 17 00:00:00 2001 From: x2Skyz Date: Thu, 13 Nov 2025 11:45:03 +0700 Subject: [PATCH] =?UTF-8?q?-=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88=E0=B8=A1?= =?UTF-8?q?=20guard=20jwt=20token=20-=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88?= =?UTF-8?q?=E0=B8=A1=20=20jwt-decoded=20-=E0=B9=80=E0=B8=9E=E0=B8=B4?= =?UTF-8?q?=E0=B9=88=E0=B8=A1=20=20=E0=B8=A3=E0=B8=B0=E0=B8=9A=E0=B8=9A=20?= =?UTF-8?q?first=20setup=20=E0=B8=94=E0=B8=B6=E0=B8=87=E0=B8=82=E0=B9=89?= =?UTF-8?q?=E0=B8=AD=E0=B8=A1=E0=B8=B9=E0=B8=A5=20=20accounting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- accounting-ng-nuttakit/package.json | 7 +-- .../main-dashboard-content.component.ts | 52 +++++++++++++------ .../src/app/services/auth.guard.ts | 20 ++++++- 3 files changed, 60 insertions(+), 19 deletions(-) diff --git a/accounting-ng-nuttakit/package.json b/accounting-ng-nuttakit/package.json index 75bb719..ac14d71 100644 --- a/accounting-ng-nuttakit/package.json +++ b/accounting-ng-nuttakit/package.json @@ -61,6 +61,7 @@ "bootstrap": "^5.3.8", "chart.js": "^4.5.1", "dotenv": "^17.2.3", + "jwt-decode": "^4.0.0", "ng2-charts": "^6.0.1", "postcss": "^8.5.6", "rxjs": "~7.8.0", @@ -73,6 +74,7 @@ "@angular/cli": "^20.3.9", "@angular/compiler-cli": "^20.3.10", "@capacitor/cli": "latest", + "@types/jasmine": "~5.1.0", "cross-env": "^10.1.0", "electron": "^39.0.0", "electron-builder": "^26.0.12", @@ -84,7 +86,6 @@ "karma-jasmine-html-reporter": "~2.1.0", "ngx-toastr": "^19.1.0", "postcss": "^8.5.3", - "typescript": "~5.9.3", - "@types/jasmine": "~5.1.0" + "typescript": "~5.9.3" } -} \ No newline at end of file +} diff --git a/accounting-ng-nuttakit/src/app/content/main-dashboard-content/main-dashboard-content.component.ts b/accounting-ng-nuttakit/src/app/content/main-dashboard-content/main-dashboard-content.component.ts index 016c70a..a06b571 100644 --- a/accounting-ng-nuttakit/src/app/content/main-dashboard-content/main-dashboard-content.component.ts +++ b/accounting-ng-nuttakit/src/app/content/main-dashboard-content/main-dashboard-content.component.ts @@ -47,31 +47,53 @@ export class MainDashboardContentComponent implements OnInit { constructor(private generalService: GeneralService) {} ngOnInit(): void { - this.fetchChartData(); + let token = localStorage.getItem('access_token') + this.OnSearchAct(token, true); } - fetchChartData(): void { - // NOTE: Using a placeholder endpoint as the actual one was not provided. - const uri = '/api/dashboard/summary-last-6-months'; - - this.generalService.getRequest(uri).subscribe({ + OnSearchAct(value: any, setupFirst: boolean): void { + const uri = '/api/web/accountingSearch'; + let request = { + token: value + } + this.generalService.postRequest(uri, request).subscribe({ next: (result: any) => { - if (result.code === '200' && result.data) { - this.processChartData(result.data); - } else { - console.warn('Could not fetch chart data:', result.message_th); - // Optionally, display placeholder data or an error message - this.setupPlaceholderData(); + if (result.code === '200') { + this.generalService.trowApi(result); + console.log(`✅ OTP ส่งไปที่ ${value.email}`); } }, error: (error: any) => { - console.error('Error fetching chart data:', error); - // Display placeholder data on error to show the graph structure - this.setupPlaceholderData(); + + }, + complete: () => { + } }); } + // fetchChartData(): void { + // // NOTE: Using a placeholder endpoint as the actual one was not provided. + // const uri = '/api/dashboard/summary-last-6-months'; + + // this.generalService.getRequest(uri).subscribe({ + // next: (result: any) => { + // if (result.code === '200' && result.data) { + // this.processChartData(result.data); + // } else { + // console.warn('Could not fetch chart data:', result.message_th); + // // Optionally, display placeholder data or an error message + // this.setupPlaceholderData(); + // } + // }, + // error: (error: any) => { + // console.error('Error fetching chart data:', error); + // // Display placeholder data on error to show the graph structure + // this.setupPlaceholderData(); + // } + // }); + // } + processChartData(data: any[]): void { const labels = data.map(item => item.month); const revenues = data.map(item => item.revenue); diff --git a/accounting-ng-nuttakit/src/app/services/auth.guard.ts b/accounting-ng-nuttakit/src/app/services/auth.guard.ts index ec66571..7ff946a 100644 --- a/accounting-ng-nuttakit/src/app/services/auth.guard.ts +++ b/accounting-ng-nuttakit/src/app/services/auth.guard.ts @@ -1,12 +1,30 @@ import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; +import { jwtDecode } from 'jwt-decode'; export const authGuard: CanActivateFn = (route, state) => { const router = inject(Router); const accessToken = localStorage.getItem('access_token'); if (accessToken) { - return true; + try { + const decodedToken: any = jwtDecode(accessToken); + const currentTime = Date.now() / 1000; + + if (decodedToken.exp < currentTime) { + // Token expired + localStorage.removeItem('access_token'); + router.navigate(['/login']); + return false; + } + + return true; + } catch (error) { + // Error decoding token + localStorage.removeItem('access_token'); + router.navigate(['/login']); + return false; + } } else { router.navigate(['/login']); return false;