Я пытаюсь отправить заголовок авторизации из моего приложения ionic 2 со следующим кодом:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class MembersService {
private baseUrl = 'http://xxx';
constructor(private http: Http) {
}
getMemberlist() {
return new Promise(resolve => {
this.http.get(`${this.baseUrl}`, this.jwt())
.map(res => res.json())
.subscribe(res => resolve(res.v_members));
});
}
private jwt() {
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser && currentUser.token) {
let headers = new Headers({ 'Authorization': 'Bearer ' + currentUser.token });
console.log(headers);
return new RequestOptions({ headers: headers });
}
}
}
В PHP Backend я заглядываю в заголовки с помощью:
$headers = getallheaders();
file_put_contents("headers.txt", print_r($headers, true));
и получите следующий вывод:
Array
(
[Host] => xxx
[Connection] => close
[Access-Control-Request-Method] => GET
[Origin] => http://localhost:8100
[User-Agent] => Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko$
[Access-Control-Request-Headers] => authorization
[Accept] => */*
[Referer] => http://localhost:8100/
[Accept-Encoding] => gzip, deflate, sdch
[Accept-Language] => de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
)
Я уже добавил следующее в .htaccess:
RewriteCond %{HTTP:Authorization} ^(.+)
RewriteRule ^(.*)$ $1 [E=HTTP_AUTHORIZATION:%1,PT]
Когда я подключаюсь к API с почтальоном, присутствует заголовок авторизации:
Array
(
[Authorization] => Bearer test_token
[Host] => xxx
[Connection] => close
[Cache-Control] => no-cache
[User-Agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.$
[Postman-Token] => 9b51b6fe-2c24-564c-9998-1acb5b02136e
[Accept] => */*
[Accept-Encoding] => gzip, deflate, sdch
[Accept-Language] => de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
[Cookie] => PHPSESSID=uiboq2m0isfgb16kfrr9dtbji1
)
Что мне здесь не хватает?
редактировать:
Установка кода в местном хранилище:
в ответе при входе в систему проблем нет. пользователь и токен установлены в локальном хранилище
login(username, password) {
return this.http.post(this.baseUrl, JSON.stringify({ username: username, password: password }))
.map((response: Response) => {
let user = response.json();
if (user && user.token) {
localStorage.setItem('currentUser', JSON.stringify(user));
}
});
}
Я наконец нашел решение.
Проблема заключалась в том, что я неправильно понял ответ об ошибке. HTTP-запрос от angular отправляет предпечатную проверку, которая была отклонена с ответом 401 от моего бэкэнда. Фактический запрос не был отправлен. Заголовок, который я разместил выше, является заголовком предварительной проверки, поэтому без каких-либо средств авторизации. После того, как я изменил свой бэкэнд для правильного ответа на предварительную проверку, отправляется запрос, включая заголовок авторизации.
Других решений пока нет …