|
@@ -1,32 +1,43 @@
|
|
|
import { Injectable, inject } from '@angular/core';
|
|
import { Injectable, inject } from '@angular/core';
|
|
|
-import { CanActivate, Router, UrlTree, ActivatedRouteSnapshot } from '@angular/router';
|
|
|
|
|
|
|
+import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
|
|
|
import { MSQParse } from '../parse';
|
|
import { MSQParse } from '../parse';
|
|
|
import { SessionService } from '../services/session.service';
|
|
import { SessionService } from '../services/session.service';
|
|
|
|
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
@Injectable({ providedIn: 'root' })
|
|
|
-export class AuthGuard implements CanActivate {
|
|
|
|
|
|
|
+export class AuthGuard implements CanActivate, CanActivateChild {
|
|
|
|
|
|
|
|
private readonly router = inject(Router);
|
|
private readonly router = inject(Router);
|
|
|
private readonly sessionService = inject(SessionService);
|
|
private readonly sessionService = inject(SessionService);
|
|
|
|
|
|
|
|
- async canActivate(route: ActivatedRouteSnapshot): Promise<boolean | UrlTree> {
|
|
|
|
|
- const isLoginPage = route.routeConfig?.path === 'login';
|
|
|
|
|
|
|
+ canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {
|
|
|
|
|
+ return this.canActivate(route, state);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ async canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Promise<boolean | UrlTree> {
|
|
|
|
|
+ const path = route.routeConfig?.path;
|
|
|
|
|
+ const isPublicPage = path === 'login' || path === 'register';
|
|
|
|
|
|
|
|
// 先检查 session 是否过期
|
|
// 先检查 session 是否过期
|
|
|
if (this.sessionService.checkExpired()) {
|
|
if (this.sessionService.checkExpired()) {
|
|
|
this.sessionService.clear();
|
|
this.sessionService.clear();
|
|
|
- if (isLoginPage) {
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (MSQParse.User.current()) {
|
|
|
|
|
+ await MSQParse.User.logOut();
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ }
|
|
|
|
|
+ if (isPublicPage) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
- return this.router.createUrlTree(['/login']);
|
|
|
|
|
|
|
+ return this.router.createUrlTree(['/mobile/login']);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 检查 Parse 本地登录态
|
|
// 检查 Parse 本地登录态
|
|
|
try {
|
|
try {
|
|
|
const user = MSQParse.User.current();
|
|
const user = MSQParse.User.current();
|
|
|
if (user) {
|
|
if (user) {
|
|
|
- if (isLoginPage) {
|
|
|
|
|
- return this.router.createUrlTree(['/home']);
|
|
|
|
|
|
|
+ if (isPublicPage) {
|
|
|
|
|
+ return this.router.createUrlTree(['/mobile/home']);
|
|
|
}
|
|
}
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -34,9 +45,9 @@ export class AuthGuard implements CanActivate {
|
|
|
// 检查失败,视为未登录
|
|
// 检查失败,视为未登录
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (isLoginPage) {
|
|
|
|
|
|
|
+ if (isPublicPage) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
- return this.router.createUrlTree(['/login']);
|
|
|
|
|
|
|
+ return this.router.createUrlTree(['/mobile/login']);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|