我正在尝试对我的应用程序实施身份验证保护。
我在 authGuard ts 文件中编写的代码是:
import {Injectable} from '@angular/core';
import {UserService} from '../../services/user.service';
import {CanActivate, Router} from '@angular/router';
@Injectable()
export class AuthService implements CanActivate {
constructor(private userService: UserService,
private router: Router) {
}
canActivate(): boolean {
const token = sessionStorage.getItem('token');
if (!token) {
this.router.navigate(['login']);
return false;
} else {
this.userService.getAuthenticatedUserDetails()
.then(data => {
if (data) {
return true;
} else {
this.router.navigate(['login']);
return false;
}
})
.catch(error => {
this.router.navigate(['login']);
return false;
});
}
}
}
我的路由模块如下:
import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {LoginComponent} from './modules/login/login.component';
import {UserComponent} from './modules/user/user.component';
import {AuthService} from './common-modules/auth/auth.guard';
const routes: Routes = [
{
path: '',
redirectTo: 'login',
pathMatch: 'full'
},
{
path: 'login',
component: LoginComponent
},
{
path: 'me',
component: UserComponent,
canActivate: [AuthService]
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {
}
所以,据我所知,auth guard 工作正常。但即使 auth 守卫返回 true,我的应用程序也会重新路由到localhost:4200而不是localhost:4200/me
我无法找到它的原因。请帮我解决它。