Я столкнулся с досадной ошибкой.Я отправляю токен авторизации в заголовке http, но когда экспресс-запрос обрабатывается, токен аутентификации отсутствует.
вот мой код:
экспресс-аутентификация:
app.all(process.env.API_BASE + "*", (req: any, res: any, next: any) => {
if (req.path.includes(process.env.API_BASE + "login")) return next();
if (req.path.includes(process.env.API_BASE + "signup")) return next();
console.log(req.headers);
return auth.authenticate((err: any, user: any, info: any) => {
if (err) { return next(err); }
if (!user) {
if (info.name === "TokenExpiredError") {
return res.status(401).json({ message: "Your token has expired. Please generate a new one" });
} else {
return res.status(401).json({ message: info.message });
}
}
app.set("user", user);
return next();
})(req, res, next);
});
angular2 (v6) GET-запрос:
public get<T>(path: string, param: string | number = '', queryParams: Object = {}, etag?: string): Promise<T> {
const requestOptions = this.generateOptions();
const builtUrl = this.buildUrl(path, param, queryParams);
return this.http.get<T>(builtUrl, requestOptions)
.toPromise()
.catch(this.handleGlobalError);
}
private generateOptions() {
let headers = new HttpHeaders()
.set('Content-Type', 'application/json')
.set('Access-Control-Allow-Origin', '*')
if (this._token) {
headers = Object.assign(headers, headers.set('Authorization',
this._token));
}
if (etag) {
headers = Object.assign(headers, headers.set('If-None-Match', etag));
}
const options = {
headers: headers,
};
return options;
}
Я также проверил это в PostMan, заголовки выглядят так:
Сервер регистрировал входящие запросы, на картинке первый запрос пришел от POSTMAN, а второй от моего углового приложения:
РЕДАКТИРОВАНИЕ НА ОСНОВЕ ОТВЕТА НА ЮНИКОРН:
private generateOptions(etag?: string) {
let withCred = false;
let headers = new HttpHeaders()
.set('Content-Type', 'application/json')
.set('Access-Control-Allow-Origin', '*')
if (this._token) {
withCred = true;
headers.set('Authorization', this._token);
//headers = Object.assign(headers, headers.set('Authorization', this._token));
}
const options = {
headers: headers,
withCredentials: withCred
};
return options;
}
к сожалению, он все еще сломан.