2017-01-12 4 views
0

Я написал службу аутентификации для аутентификации имени пользователя и пароля на странице входа. Код ниже - это сервис.Ionic2 - http get не работает

public login(credentials) { 
    if (credentials.username === null || credentials.password === null) { 
     return Observable.throw("Please insert credentials"); 
    } else { 

    let apiURL = 'http://localhost/timeclock/api/login?usercode=' + credentials.username + 
    '&password=' + credentials.password ; 

    return Observable.create(observer => {  
    this.http.get(apiURL).map(res => res.json()).subscribe(data => {   
    if (data.success === 'true') 
    { 
     this.currentUser.name = data.data.user_name; 
     this.currentUser.email = data.data.user_email; 
     observer.next(true); 
     observer.complete(); 
    } else { 
     observer.next(false); 
     observer.complete(); 
     }  
    }); 
    }); 
} 
} 

Когда имя пользователя и пароль отправляются, URL-адрес правильно вызывается с правильными параметрами.

http-вызов занимает очень много времени. Кроме того, ответ не возвращается.

Для получения ответа при вызове URL с теми же параметрами в браузере требуется всего две или три секунды.

Любая идея о том, как исправить это?

+0

Вы пытались установить заголовки. также вы не устанавливаете улов для каких-либо ошибок. –

+1

Я бы рекомендовал вам использовать 'POST' для входа в систему, таким образом, пароль не отображается в URL-адресе, и вы все равно можете получить возвращаемое значение. Теперь ваша проблема. Можете ли вы проверить инструменты разработчика Chrome, если ваш запрос «GET» действительно отправлен и какой ответ? – Ivaro18

+0

Спасибо за ваши комментарии. Я обнаружил, что вызов занимает много времени, когда api называется в первый раз. Он работает нормально в последующих вызовах. Что касается нулевого ответа, я обнаружил, что мне нужно настроить заголовки в ответе API до отправки ответа. Теперь я получаю значения из API. –

ответ

0

Вам не нужно создавать новое Наблюдаемое, которое вы можете реорганизовать следующим образом.

public login(credentials) : Observable<boolean> { 
    if (credentials.username === null || credentials.password === null) { 
    return Observable.throw("Please insert credentials"); 
    } else { 

    let apiURL = 'http://localhost/timeclock/api/login?usercode=' + credentials.username + 
     '&password=' + credentials.password ; 

    return this.http.get(apiURL).map(res => res.json()) 
     .map(data => 
     { 
     if(data.success){ 
      this.currentUser.name = data.data.user_name; 
      this.currentUser.email = data.data.user_email; 
      return true; 
     }else{ 
      return false; 
     } 
     }); 
    } 
} 
+0

Я новичок в ионной. Когда мы используем Observable.create? Мне удалось сделать код более комментированным. –

+0

Если вы хотите создать свой собственный пользовательский наблюдаемый. Наблюдаемые из библиотеки RxJS проверяют http://reactivex.io/rxjs/ для официальной документации. Прочтите этот сайт, чтобы узнать его https://www.learnrxjs.io/. Я рекомендую вам научиться этому, потому что Ionic 2 и Angular 2 много внимания уделяют наблюдаемым. –

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