首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角角2- JWT :使用AuthHttp: JWT获取错误必须有三个部分

角角2- JWT :使用AuthHttp: JWT获取错误必须有三个部分
EN

Stack Overflow用户
提问于 2017-05-31 01:30:39
回答 1查看 1.4K关注 0票数 0

当我使用AuthHttp时,我得到了一个错误,但是身份验证返回了一个很好的令牌。我在https://jwt.io/上验证了它,它很好。

我使用的是角4。我的代码如下:

SignIn码

代码语言:javascript
复制
 signIn(login: string, password: string) {
    this.UserLogin.name = login;
    this.UserLogin.password = password;

    this.http.post(this.baselink + '.json', this.UserLogin, { headers: contentHeaders })
      .subscribe(
      response => {
        localStorage.setItem('id_toke', response.json().token);
        this.jwt = localStorage.getItem('id_toke');
        this.decodedJwt = this.jwtHelper.decodeToken(this.jwt);
        this.userRole = this.decodedJwt.roles;
        console.log(this.userRole);
        this.useJwtHelper();
        this.router.navigate(['/']);
      },
      error => {
        console.log('Http Error ' + error.text());
        this.router.navigate(['http-error']);
      }
      );
  }

tokenhttps://developer.qcloudimg.com/http-save/yehe-900000/1fd88679a5f40d7538834e358636a531.jpg1:"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGVzIjpbInJlYWQtb25seSIsInJlYWQtd3JpdGUiXSwiaWF0IjoxNDk2MTkxNDg4LCJleHAiOjE0OTYyMDAwODh9.qPCQY3yHujuCLb9g-F5b0MUQO3tyTr_Y5YRoMOQ0DBA“

但是获取数据是抛出错误

代码语言:javascript
复制
   getPayments() {
       return this.authHttp.get(this.baselink + '/getPayments', { headers: contentHeaders })
            .map(
            (response: Response) => {
                const data = response.json();
                return data;
            }
            )
            .catch(
            (error: Response) => {
               console.log('Error getPayments: ' + error);
                return Observable.throw('Something went wrong: ' + error.text);
            }
            );
     }

和得到

错误getPayments:错误: JWT必须有三个部分

话虽如此,但如果我使用return this.http.get(this.baselink + '/getPayments'),它就能工作。AuthHttp的连接没有到达服务器。该特定控制器暂时不受服务器上的限制,但其目的是保护它,可能令牌不包括在AuthHttp头中。

代码语言:javascript
复制
@NgModule({
    providers: [
        {
            provide: AuthHttp,
            useFactory: authHttpServiceFactory,
            deps: [Http, RequestOptions]
        }
    ]
})
export class AuthorizationModule { }


export function authHttpServiceFactory(http: Http, options: RequestOptions) {
    return new AuthHttp(new AuthConfig({
        headerName: 'Authorization',
        headerPrefix: 'bearer',
        tokenName: 'token',
        tokenGetter: (() => localStorage.getItem('id_token')),
        globalHeaders: [{ 'Content-Type': 'application/json' }],
        noJwtError: true
    }), http, options);
}

和全局报头

代码语言:javascript
复制
export const contentHeaders = new Headers();
contentHeaders.append('Accept', 'application/json');
contentHeaders.append('Content-Type', 'application/json');
EN

回答 1

Stack Overflow用户

发布于 2017-05-31 02:11:28

我将我的功能更改为

代码语言:javascript
复制
getPayments():  Observable<Payment[]> {
    // add authorization header with jwt token - mine is saved in authService service in jwt variable
    let headers = new Headers({ 'Authorization': 'Bearer ' + this.authService.jwt });
    let options = new RequestOptions({ headers: headers });


    return this.http.get(this.baselink + '/getPayments', options)
        .map((response: Response) => response.json())
        .catch(
        (error: Response) => {
            console.log(error);
            return Observable.throw('Something went wrong: ' + error.text);
        });
}

现在得到这个错误

代码语言:javascript
复制
function (encodingHint) {
        if (encodingHint === void 0) { encodingHint = 'legacy'; }
        if (this._body instanceof URLSearchParams) {
            return this._body.toString();
        }
        if (this._body instanceof ArrayBuffer) {
            switch (encodingHint) {
                case 'legacy':
                    return String.fromCharCode.apply(null, new Uint16Array(/** @type {?} */ (this._body)));
                case 'iso-8859':
                    return String.fromCharCode.apply(null, new Uint8Array(/** @type {?} */ (this._body)));
                default:
                    throw new Error("Invalid value for encodingHint: " + encodingHint);
            }
        }
        if (this._body == null) {
            return '';
        }
        if (typeof this._body === 'object') {
            return JSON.stringify(this._body, null, 2);
        }
        return this._body.toString();
    }

检查服务器端,授权将丢失!!

更新这是服务器端的cros问题。因此,显然浏览器会发送2个电话,请求服务器允许该头和服务器批准它。在我的例子中,服务器端需要将我的url添加到FilterRegistraionBean中。我把它加进去了,但不对

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44274260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档