2017-02-08 3 views
0

Я пытаюсь использовать authHttp jwt для установки соединения API с конкретным концом. Я пытаюсь сделать это первым без каких-либо токенов, чтобы я мог проверить его, но он швы, как будто он даже не подключается. Я использую его следующим образом:Угловое 2 AuthHttp с jwt не подключающимся

this.authHttp.get('localhost:3001/api/basic') 
    .subscribe(
    data => console.log("data"), 
    err => console.log(err), 
    () => console.log('Request Complete') 
); 

ошибка я получаю в консоли AuthHttpError {}

Я установил мои ngModules, как это говорится в руководстве:

providers: [ 
{ 
    provide: AuthHttp, 
    useFactory: authHttpServiceFactory, 
    deps: [Http, RequestOptions] 
} 

И

function authHttpServiceFactory(http: Http, options: RequestOptions) { 
    return new AuthHttp(new AuthConfig({noTokenScheme : true}), http); 
} 

дело в том, что диск это меня с ума, что использование HTTP он прекрасно работает так:

this.http.get('http://localhost:3001/api/basic').subscribe(
    data=> console.log(data), 
    error=> console.log("Getting Error") 
); 

Возможно, вы думаете: «Почему он не использует http, а не authHttp?». Ну, это потому, что установка вереска «Авторизация» и его токенов швов невозможна с http.

Любая помощь или руководство были бы чрезвычайно полезными.

+1

Какие заголовки 'Authorization' вам нужны? эта библиотека предназначена для токенов JWT, поэтому их не использовать с ними невозможно. Тем временем я отправлю ответ с примерами –

ответ

1

Если вы не нужен JsonWebTokens, а просто хотите добавить пользовательские заголовки, вы можете сделать это таким образом, без необходимости импортировать angular2-jwt библиотеки:

В вашей службе:

private customHeaders: Headers = this.setCredentialsHeader(); 

setCredentialsHeader() { 
    let headers = new Headers(); 
    let credentials = window.localStorage.getItem('credentials2'); 
    headers.append('Authorization', 'Basic ' + credentials); 
    return headers; 
} 

someMethod() { 
    let url = 'your.URL.to.API'; 

    return this.http 
    .get(url, { headers: this.customHeaders }) 
    .map(result => { 
     console.log(result); 
    }); 
} 

Таким образом, вы можете добавить заголовок Authorization с типом данных, которые вы хотите.


Если это AuthorizationBearer типа заголовок вы ищете и использовать его с angular2-jwt, вы можете использовать конфигурацию по умолчанию, прежде чем пытаться предоставить собственный экземпляр AuthHttp через фабрику. Будет намного проще отладить и определить, где проблема.

Из документации: https://github.com/auth0/angular2-jwt#configuration-options

AUTH_PROVIDERS дает установку конфигурации по умолчанию:

В вашем модуле с вашими услугами, просто импортировать AUTH_PROVIDERS так:

import { AUTH_PROVIDERS } from 'angular2-jwt'; 

... 

@NgModule({ 
    ... 
    providers: [ 
    AUTH_PROVIDERS, 
    ... 
    ] 
}) 

и просто используйте экземпляр AuthHttp в своем сервисе, как и вы.

Вы должны увидеть на вкладке «Навигационная сеть» ваши заголовки, добавленные в ваш запрос.

EDIT:

Как указано в документации, она Добавляя значение маркера в заголовках из Token Getter Function, определенных в AUTH_PROVIDERS по умолчанию.

Вы должны добавить свой JWT в свой LocalStorage с именем по умолчанию id_token.

Чтобы дать вам мой рабочий пример, я устанавливаю JWT на процесс аутентификации, где я получаю JWT в ответ от моего Http звонок:

auth.service.ts

this.identityService.setToken(token.accessToken); 

identity.service.ts

setToken(token?) { 
    if (token) { 
     window.localStorage.setItem('id_token', token); 
    } else { 
     window.localStorage.removeItem('id_token'); 
    } 
    } 

Вы должны быть в состоянии видеть ваше JW T на вашей сетевой вкладке, если все сделано правильно. Затем экземпляр AuthHttp должен добавить заголовки к вашим запросам, как это было запланировано ...

Возможно, это не сработает, если ваш токен не является JWT. Чтобы проверить, хороший ли он, вы можете использовать такой сайт, как https://jwt.io/, где он будет декодирован.

Если он все еще не работает, это означает, что проблема исходит из других источников. Служба не предоставлена ​​правильно и т. Д.

+0

Это оповещение для авторизации, в чем я нуждаюсь. Я импортировал AUTH_PROVIDERS, как вы сказали, но это не вызов. При просмотре на вкладке «Навигационная сеть» ничего нет. В консоли я все еще получаю AuthHttpError. – ZanattMan

+0

Я пробовал http-путь, установив заголовок авторизации, но при проверке на вкладке NAvigatior Network он выглядит так, как заголовок не установлен. Я сделал это с: var headers = new Headers(); headers.append ('Авторизация', 'Носитель $ {pass}'); this.http.get ('HTTP: // локальный: 8080/outputEndpoints', { заголовки: заголовки }). Подписаться ( данных => console.log (данные), ошибку => console.log («Получение ошибки») ); } – ZanattMan

+0

BTW, при настройке заголовка с http я получаю следующее сообщение: «Ответ на запрос предварительной проверки не проходит проверку контроля доступа: нет заголовка« Access-Control-Allow-Origin »на запрошенном ресурсе. " – ZanattMan