【发布时间】:2017-10-12 15:55:34
【问题描述】:
我需要一个 Authorization 标头附加到我的 Angular2 应用程序完成的每个 HTTP 请求。
第一个请求是登录请求,它没有授权标头。登录成功后,服务器会返回一个令牌,我需要将其作为授权标头附加到每个后续 HTTP 请求中。
我从服务器获取令牌没有任何问题。我可以使用我的 angular2 应用程序成功登录。但问题是,令牌未附加到后续请求标头。
这是我的实现。
我创建了一个扩展 BaseRequestOptions 类的 CustomRequestOptions 类。
@Injectable()
export class CustomRequestOptions extends BaseRequestOptions {
constructor(private _globals: Globals) {
super();
this.headers.append('Content-Type', 'application/json');
}
addHeader(headerName: string, headerValue: string) {
console.log("Custom req options, setting the customer header "+headerName+" , "+headerValue);
this.headers.append(headerName, headerValue);
}
}
我已将其添加到 @NgModule 以使此 CustomRequestOptions 成为全球性的。(在所有组件中可见)
@NgModule({
imports: [ BrowserModule, HttpModule, routing, FormsModule ],
declarations: [ AppComponent, TendersComponent, TenderCategoriesComponent, TenderDetailsComponent, PageNotFoundComponent, ConvertUrlPipe ],
providers : [ Globals,
{provide: RequestOptions, useClass: CustomRequestOptions}
],
bootstrap: [ AppComponent ]
})
现在,在我的组件类中,我正在调用CustomRequestOptions 中的addHeader 方法。
export class LoginComponent {
private _token: string;
private _returnMsg: string;
constructor(private _usersService: UsersService, private _globals: Globals, private _customRequestOptions: CustomRequestOptions) {
}
onLoginFormSubmit(formData: any) {
this._usersService.login(formData.emailAddress, formData.password).subscribe(
returnRes => {
this._returnMsg = returnRes.returnMsg;
this._token = returnRes.token;
if (this._returnMsg == "SUCCESS") {
//sucess
console.log("AUTH SUCCESS");
let x = "Bearer " + this._token;
this._customRequestOptions.addHeader("Authorization", x);
this.getUserRoles(); //this call needs authorization header.
}
}
);
}
}
即使我使用this._customRequestOptions.addHeader("Authorization", x); 设置标头,下一个需要授权标头才能正常工作的调用也会失败。在服务器端,我可以看到,那部分是空的。
这里有什么问题?
【问题讨论】:
-
你看过github.com/auth0/angular2-jwt吗?对于 JWT,这是我的首选路线。
-
事实上没有。感谢您的信息。但目前,我更喜欢这个解决方案,因为完成新事物需要一些时间
标签: angular http-headers angular-http