【发布时间】:2017-07-25 04:03:44
【问题描述】:
我正在尝试使用 Auth0 和 JWT 来保护我的 SPA 应用程序。如果我使用来自@angular/http 的“正常”Http 进行 http.get,它工作正常,但是当我使用 AuthHttp 进行完全相同的调用时,什么也没有发生,也没有错误。 这是我的服务:
constructor(private authHttp: AuthHttp) {
}
loadItems(): Observable<FrontItemDto[]> {
return this.authHttp.get ( `${ServiceSettings.ApiUrl}/front` )
.map ( res => {
res.json ();
} )
.catch ( (error: any) => Observable.throw ( error.json ().error || 'Server error' ) );
}
这是 app.module
import { AuthHttp, AuthConfig } from 'angular2-jwt';
...
export function authHttpServiceFactory(http: Http, options: RequestOptions) {
return new AuthHttp(new AuthConfig({
tokenName: 'token',
tokenGetter: (() => sessionStorage.getItem('token')),
globalHeaders: [{'Content-Type': 'application/json'}],
}), http, options);
}
....
providers: [
...
AuthService,
{
provide: AuthHttp,
useFactory: authHttpServiceFactory,
deps: [Http, RequestOptions]
}
],
【问题讨论】:
-
如果将
AuthConfig对象中的noJwtError设置为true,会发生什么情况?然后它会与常规的 http 请求连接吗? -
@KimKern,现在好像没事了。
-
@KimKern,请将此添加为答案。
-
既然您已经设置了标志,我本来希望它会执行未经身份验证的请求。您的后端是否已经需要身份验证?如果您查看 DevTools 的 Network 选项卡,是否设置了 Authentication 标头?
noJwtError设置为 false(默认),如果 AuthHttp 无法访问令牌或令牌过期/无效,则不会发送请求。您是否确保可以从控制台使用sessionStorage.getItem('token')访问存储的令牌,并且返回的令牌是否有效(例如使用jwt.io 调试器)。如果它真的有效,我很乐意将其添加为答案:) -
@KimKern,是的,WebApi 已经需要授权。像现在这样没有发送 Bearer Header。