要实现Angular SSR不等待AWS Cognito的令牌检索,可以使用Angular的HttpClient拦截器和RxJS Observables。
首先,创建一个名为TokenInterceptor
的拦截器,在拦截器中检查令牌是否存在。如果令牌不存在,可以通过window.location.href
重定向到AWS Cognito的登录页面。
import { Injectable } from '@angular/core';
import {
HttpEvent,
HttpInterceptor,
HttpHandler,
HttpRequest
} from '@angular/common/http';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
intercept(
request: HttpRequest,
next: HttpHandler
): Observable> {
const token = localStorage.getItem('token'); // 从本地存储中获取令牌
if (token) {
// 如果令牌存在,将其添加到请求头中
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
} else {
// 如果令牌不存在,重定向到AWS Cognito的登录页面
window.location.href = 'https://your-cognito-login-page';
return;
}
return next.handle(request);
}
}
然后,在Angular应用的AppModule
中将TokenInterceptor
添加到提供的拦截器数组中。
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { TokenInterceptor } from './token.interceptor';
@NgModule({
imports: [HttpClientModule],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: TokenInterceptor,
multi: true
}
]
})
export class AppModule {}
这样,每次发出的HTTP请求都会通过拦截器进行处理。如果令牌不存在,用户将被重定向到AWS Cognito的登录页面。
请注意,以上示例仅提供了基本的概念演示,并假设您已经在本地存储中保存了令牌。您可能需要根据您的具体需求进行适当的修改和调整。