2017-02-18 10 views
6

в моем приложении (Угловой 2/Ионный 2) Я внедрил свой собственный логин/аутентификацию. В основном это работает следующим образом: при входе в систему, имя пользователя и пароль проверяются с помощью PHP-сервера. Создается токен, который отправляется обратно в заголовок в заголовке (авторизация). Ответ от бэкэнд выглядит так:Угловой 2: Получить заголовок авторизации

HTTP/1.1 200 OK 
Host: localhost:8080 
Connection: close 
X-Powered-By: PHP/5.6.28 
Set-Cookie: PHPSESSID=jagagi2le1b8i7r90esr4vmeo6; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Type: application/json 
Authorization: d7b24a1643a61706975213306446aa4e4157d167eaad9aac989067a329c492d3 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
Content-Length: 301 

Очевидно, что имеется заголовок авторизации с токеном. CORS, похоже, также настроен правильно, так как я вижу авторизацию в заголовке Allow-Headers.

Но, когда я пытаюсь получить заголовок в угловых 2, она всегда возвращает нуль:

private extractDataAndSetAuthHeader(res: Response) { 

    // Set auth header if available. 
    // If not available - user is not logged in. Then 
    // we also have to remove the token from localStorage 
    if(res.headers.has("Authorization")) 
    { 
     let token = res.headers.get("Authorization"); 

     this.setToken(token); 
    } 
    else 
    { 
     // If no token is sent, remove it 
     this.removeToken(); 
    } 

    let body = res.json(); 
    return body.data || { }; 
} 

Первая строка метода возвращает ложь. Кроме того, когда я просматриваю заголовки объекта в моем ответе, он показывает мне только следующее (Chrome Dev инструменты):

[[Entries]]: 
Array[4] 
0:{"pragma" => Array[1]} 
1:{"content-type" => Array[1]} 
2:{"cache-control" => Array[1]} 
3:{"expires" => Array[1]} 

Там нет авторизации заголовка присутствует в этом объекте.

Может ли кто-нибудь помочь мне?

Заранее спасибо :)

+0

'Авторизация 'обычно используется как заголовок запроса, а не как r esponse. Почему бы вам не вернуть токен доступа в тело ответа? –

+0

Потому что, насколько я знаю, для этого используется заголовок 'Authorization'. При каждом запросе (когда пользователь входит в систему) я отправляю заголовок авторизации в запросе, проверяю, действительно ли токен действителен, а затем, чтобы быть более безопасным, регенерировать токен и отправить его обратно в интерфейс с помощью ' Заголовок авторизации. Я что-то упустил? – dave0688

+3

http://stackoverflow.com/q/42306684/2587435 –

ответ

15

Просто хотел отправить ответ, как это могло бы помочь другим: Решение, как установить

Access-Control-Expose-Headers: Authorization 

Затем - интерфейс может прочитать заголовок Authorization, а также.

+1

где вы это добавили? – MrNew

+0

Вы должны добавить это в свой сервер. – VWeber

+0

Tks, который работает для меня. –

2

Этот ответ помог мне: link

Он показывает, как добавить его в административной панели и как использовать его в интерфейсе

Java бэкенд:

public void methodJava(HttpServletResponse response){ 
... 
response.addHeader("access-control-expose-headers", "Authorization"); 
} 

и доступ к заголовку на угловой например:

return this.http 
    .get(<your url here for your backend>) 
    .map(res => console.log("cookie: " + res.headers.get("Authorization")) 
} 
+0

Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ полезен без него: [добавить контекст вокруг ссылки] (// meta.stackexchange.com/a/8259), чтобы ваши друзья-пользователи имели представление о том, что это такое и почему он там, затем укажите наиболее релевантную часть страницы, на которую вы ссылаетесь, в случае недоступности целевой страницы. [Ответы, которые немного больше, чем ссылка, могут быть удалены.] (// stackoverflow.com/help/deleted-answers) – Rob

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылка для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/18132740) –

 Смежные вопросы

  • Нет связанных вопросов^_^