2015-12-25 2 views
0

Я хочу реализовать аутентификацию. На самом деле, мой проект строится в Angular 2 Beta, но я использую образец проверки подлинности this для тестирования. У меня есть собственный API, и я просто добавил его URL к этому образцу проекта. Это не сработало) Он показывает эту ошибку:Ошибка аутентификации: ответ на предполетный период имеет недопустимый код состояния HTTP 405

Failed to load resource: the server responded with a status of 405 (Method Not Allowed) 
Fetch API cannot load http://blah-blah-blah. Response for preflight has invalid HTTP status code 405 

Вот метод Логин:

login(event, phone, password) { 
event.preventDefault(); 
window.fetch('http://blah-blah-blah', { 
    method: 'POST', 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ 
    phone, password 
    }) 
}) 
.then(status) 
.then(json) 
.then((response:any) => { 
    localStorage.setItem('access_token', response.id_token); 
    this.router.parent.navigateByUrl('/home'); 
}) 
.catch((error) => { 
    alert(error.message); 
    console.log(error.message); 
}); 
} 

ответ

4

Похоже, что вы пытаетесь сделать перекрестный вызов домена AJAX. Для этого для работы ваш сервер удаленного API должен поддерживать CORS. Запрос перед полетом является специальным запросом о том, что браузер посылает с помощью глагола OPTIONS до принятия фактического запроса POST:

OPTIONS http://blah-blah-blah 

сервер должен отвечать с нормальным 200 кодом состояния и включает в себя соответствующие заголовки CORS указания того, какие доменам разрешено делать запросы к нему. Только после этого будет отправлен фактический запрос POST.

Проблема с вашим API заключается в том, что конечная точка вернула 405 недопустимый код состояния этому OPTIONS. Поэтому вам нужно будет исправить свой API так, чтобы он поддерживал глагол OPTIONS.

+0

Я думаю, вы пропустили мой ответ. Проблема не в вашем угловом приложении. Он находится на API-интерфейсе на стороне сервера, который вы пытаетесь вызвать. Вот где вы должны исправить эту проблему и включить CORS. Поэтому в основном вы должны включить CORS для конечной точки 'http: // api.paydacard.kz/identity/login'. В вашем вопросе вы упомянули, что это ваш собственный API, поэтому не должно быть проблемой его обновления. –

+0

Я получил его) Но я не могу настроить API, у меня нет доступа к нему. –

+0

О, тогда у вас есть проблема. Если вы не можете изменить код этого API, вам нужно будет настроить другой API, размещенный в том же домене, что и ваше угловое приложение, и который будет служить мостом между вашим доменом и удаленным доменом. Таким образом, в основном вы отправите запрос AJAX из своего углового приложения в этот локальный API, например '/ myapi', и он позаботится о делегировании вызова, сделав запрос на стороне сервера удаленному API. –

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

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