auth.guard.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { Injectable } from '@angular/core';
  2. import {
  3. CanActivate,
  4. ActivatedRouteSnapshot,
  5. RouterStateSnapshot,
  6. } from '@angular/router';
  7. import { Observable } from 'rxjs';
  8. import { Router } from '@angular/router';
  9. import Parse from 'parse';
  10. import { AlertController } from '../modules/ionic-standalone.modules';
  11. @Injectable({
  12. providedIn: 'root',
  13. })
  14. export class AuthGuard implements CanActivate {
  15. LoginPage = 'login';
  16. constructor(
  17. public router: Router,
  18. private alertController: AlertController
  19. ) {}
  20. canActivate(
  21. next: ActivatedRouteSnapshot,
  22. state: RouterStateSnapshot
  23. ): Observable<boolean> | Promise<boolean> | boolean {
  24. // 当前路由url
  25. let url: string = state.url;
  26. return this.checkLogin(url);
  27. }
  28. checkLogin(url: string): boolean {
  29. // 如果已登录,直接跳转当前路由 跳出该函数
  30. let currentUser = Parse.User.current();
  31. if (!currentUser?.id) {
  32. // 否则重定向到login页面
  33. this.router.navigate([this.LoginPage]);
  34. return false;
  35. }
  36. let p = localStorage.getItem('profile');
  37. let missPaths = ['/user/certification','tabs/home'];
  38. if (missPaths.includes(url) && (!p || !JSON.parse(p)?.isCross)) {
  39. this.alertModal();
  40. }
  41. return true;
  42. }
  43. async alertModal() {
  44. const alert = await this.alertController.create({
  45. cssClass: 'my-custom-class',
  46. header: '实名认证',
  47. message: '根据相关法律法规要求,请先完成实名',
  48. backdropDismiss: false,
  49. buttons: [
  50. {
  51. text: '去认证',
  52. handler: () => {
  53. this.router.navigate(['user/certification']);
  54. },
  55. },
  56. ],
  57. });
  58. await alert.present();
  59. }
  60. }
  61. export { CanActivate };