Angular 在第8页上,刷新页面不会';t显示来自后端api的数据

Angular 在第8页上,刷新页面不会';t显示来自后端api的数据,angular,firebase,django-rest-framework,firebase-authentication,angular8,Angular,Firebase,Django Rest Framework,Firebase Authentication,Angular8,我从后端获取数据并将其显示在mat表中,该表在延迟加载模块内的组件上呈现。在我从浏览器刷新页面之前,一切似乎都很正常(或者在运行ng serve和编写代码时,它会自行刷新,顺便说一下,这就是我发现错误的原因) 刷新页面时,从API获取的数据不再显示。当从不同的页面导航时,它会工作 我在后端使用Django rest框架为angular客户端提供API。 我的应用程序在后端使用JWT对用户进行身份验证,在前端使用firebase对用户进行身份验证 我使用Http拦截器将JWT令牌添加到所有Http

我从后端获取数据并将其显示在mat表中,该表在延迟加载模块内的组件上呈现。在我从浏览器刷新页面之前,一切似乎都很正常(或者在运行ng serve和编写代码时,它会自行刷新,顺便说一下,这就是我发现错误的原因)

刷新页面时,从API获取的数据不再显示。当从不同的页面导航时,它会工作

我在后端使用Django rest框架为angular客户端提供API。 我的应用程序在后端使用JWT对用户进行身份验证,在前端使用firebase对用户进行身份验证

我使用Http拦截器将JWT令牌添加到所有Http请求中

auth.service.ts以获取令牌

getToken() {
   let tokenPromise = new Promise ((resolve, reject) => {
    this.afAuth.auth.onAuthStateChanged( user => {

      if (user) {

        this.afAuth.auth.currentUser.getIdToken()
         .then(token => {
           this.userToken = token;
         });
      }

      if (this.userToken) {
        resolve(this.userToken);
      }

    });
   });

   return tokenPromise;

  }
api.service.ts发送http请求

public getEmployees(): Observable<Employee[]> {
    return this.http.get<Employee[]>(`${this.url}/employee/`);
  }
public getEmployees():可观察{
返回this.http.get(`${this.url}/employee/`);
}
token-interceptor.service.ts用于添加令牌

@Injectable({
  providedIn: 'root'
})
export class TokenInterceptorService implements HttpInterceptor {


  constructor(private authService: AuthService) { }

  intercept(req, next): Observable<any> {

    return from(this.authService.getToken()).pipe(
      switchMap(token => {
          const headers = req.headers
              .set('Authorization', 'JWT ' + token)
              .append('Content-Type', 'application/json');
          const reqClone = req.clone({
              headers
          });
          return next.handle(reqClone);
      }));
 }
}
@可注入({
providedIn:'根'
})
导出类TokenInterceptorService实现HttpInterceptor{
构造函数(私有authService:authService){}
截距(req,next):可观测{
从(this.authService.getToken()).pipe返回(
开关映射(令牌=>{
const headers=req.headers
.set('Authorization','JWT'+令牌)
.append('Content-Type','application/json');
const reqClone=req.clone({
标题
});
返回next.handle(reqClone);
}));
}
}

在Chrome浏览器开发者工具的“网络”选项卡上,我可以看到在正常导航下获取employee/但当浏览器刷新时,employee/不再存在。

问题在于以下行: this.afAuth.auth.currentUser.getIdToken()

currenUser可以为null,我们需要afAuth.authState

详细答案可在以下链接中找到:


在组件中如何/在何处触发加载员工列表?员工列表位于人力资源管理模块内,而人力资源管理模块是从仪表板模块延迟加载的。仪表板模块添加了导航组件,因此每个模块都将在其中,除了注册、登录等,它位于fireauth目录中,不需要导航组件。