【问题标题】:Auth0 Angular 2. Error when using AuthHttpAuth0 Angular 2. 使用 AuthHttp 时出错
【发布时间】: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。

标签: angular auth0


【解决方案1】:

AuthConfig 对象中的noJwtError 设置为true 时,带有无效或丢失令牌的请求将通过常规HTTP 请求(无需身份验证)进行处理。

如果是这种情况,您应该检查是否可以在提供的位置访问您的令牌(此处为来自 DevTools 控制台的sessionStorage.getItem('token'))以及提供的令牌是否有效。要检查有效性,例如可以使用https://jwt.io 的令牌调试器。

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 2017-06-10
    • 1970-01-01
    • 2017-04-03
    • 2017-10-31
    • 2017-06-26
    • 2018-05-25
    • 2016-12-25
    • 2017-08-31
    相关资源
    最近更新 更多