0

我使用 ngx admin 创建使用 nebular 的管理面板,我按照这个文档添加 authGard:
docs

这可以自定义登录:
docs2

所有的事情都是真实的,我得到了成功的信息: 图像

但我在 autogard 中弄错了:
img2

我使用的代码:

@NgModule({
  declarations: [
    AppComponent,
  ],
  providers: [
    AuthGuard,
  ],
  imports: [
    ***
  ],
  bootstrap: [AppComponent],
})
export class AppModule {
}

//**********

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private authService: NbAuthService, private router: Router) {
  }

  canActivate() {
    console.log(this.authService.isAuthenticated());
    return this.authService.isAuthenticated()
      .pipe(
        tap(authenticated => {
          if (!authenticated) {
            console.log(authenticated);
            this.router.navigate(['auth/login']);
          }
        }),
      );
  }
}

//**********

const routes: Routes = [
  {
    path: 'pages',
    canActivate: [AuthGuard],
    loadChildren: () => import('./pages/pages.module')
      .then(m => m.PagesModule),
  },
  {
    path: 'auth',
    loadChildren: () => import('./auth/auth.module').then(m => m.NgxAuthModule),
  },
  { path: '', redirectTo: 'pages', pathMatch: 'full' },
  { path: '**', redirectTo: 'pages' },
];

4

1 回答 1

1

问题解决了。
文件说响应应该是这样的:

{
data: {
 token: 'some-jwt-token'
  } 
}

我的回答是:

{
data: {
  access_token: 'some-jwt-token'
  }
}

在文档中写道,我们可以将(令牌)更改为其他类似的东西:

 token: {
           key: 'access_token', // this parameter tells where to look for the token
         }

但这不是真的,我们应该在 NbAuthModule.forRoot 中使用它:

 token: {
           key: 'data.access_token',
         }
于 2020-03-21T19:19:42.503 回答