【发布时间】:2019-06-18 14:23:44
【问题描述】:
在 Angular 7+ 项目中,我尝试使用 @auth0/angular-jwt 模块添加一个 Bearer 令牌作为 Authorization 标头,然后将请求发送到受保护的 rest api。
我在列入白名单的 URL 上发送了一个请求并收到 401 异常,然后我检查了网络(使用提琴手)传输了哪个标头,授权标头不存在。
我遵循了所有readme 指示,甚至检查了如果我只包含了一次 HttpClientModule。
app.module.ts :
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { JwtModule } from '@auth0/angular-jwt';
import { tokenGetter } from './environment';
import { AppComponent } from './app.component';
// ... other components
@NgModule({
declarations: [
AppComponent
// ... other components
],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule,
HttpClientModule,
JwtModule.forRoot({
config: {
tokenGetter: tokenGetter,
whitelistedDomains: ["localhost:8080"]
}
})
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
environment.ts:
export function tokenGetter() {
return localStorage.getItem('access_token');
}
【问题讨论】:
-
您为自述文件提供的链接是针对 AngularJS 应用程序的,而不是针对 Angular 的。这是正确的链接吗?此外,Angular 提供了一个带有拦截器的 http 服务,在这些拦截器中你可以附加你的不记名令牌。最后一件事,您的 localStorage 是否真的有一个名为
access_token的项目? -
糟糕,我编辑了链接!该模块应提供 HttpInterceptor
-
好吧,不管怎样,你在哪里打电话给
localStorage.setItem? -
在 AuthService 上,我在控制台上检查了令牌是否已设置,实际上使用了 getter 函数
-
为什么需要图书馆?通过简单的拦截器添加它有什么问题?
标签: angular jwt angular7 angular2-jwt