2016-04-28 4 views
2

Я использую oauth2 для обработки входа пользователя через facebook. Ошибка возникает, когда я вызываю сервер авторизации в golang api.Facebook Oauth CORS error

Это сетевая ошибка.

Fetch API cannot load https://www.facebook.com/dialog/oauth?client_id=1543358959292867&redirect_u…=email+public_profile&state=mUi4IpdY8yF5TNVVptMNNSn8IbVSZxJXTSEFM8Zg8LM%3D. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Информация о сети (хром)

Request URL:https://www.facebook.com/dialog/oauth?client_id=1543358959292867&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2FFBLogin%2FCallback&response_type=code&scope=email+public_profile&state=lkmenB4FjNOShUQzL0Gpymi1xsvauaL7TawmUjCyvI4%3D Request Method:GET Status Code:302 Remote Address:[2a03:2880:f003:c1f:face:b00c:0:25de]:443

заголовки запроса

:authority:www.facebook.com :method:GET :path:/dialog/oauth?client_id=1543358959292867&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2FFBLogin%2FCallback&response_type=code&scope=email+public_profile&state=KPbwnGWQoI7PHvwhJ_JvZ7RowPthjqpaDTgKVI5NHrM%3D :scheme:https accept:*/* accept-encoding:gzip, deflate, sdch accept-language:en-US,en;q=0.8 origin:null referer:http://localhost:3000/ user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36

функции Javascript, который вызывает сервер API.

let loginUrl = "http://localhost:7001/FBLogin" //server url let config = { method: 'GET', mode: 'cors', } fetch(loginUrl, config).then(response => { ... }

функция Golang, которая вызывает OAuth сервер авторизации (facebook).

func FBLogin(w http.ResponseWriter, r *http.Request) { state, err := hashutil.GenerateRandomState() logutil.Fatal(err) url := config["fb"].AuthCodeURL(state) logutil.OauthSessionLogger(state) http.Redirect(w, r, url, 302) }

Я установил правильные заголовки на стороне сервера следующие данного руководства. Setting HTTP headers in Golang

Я не могу найти, где ошибка. (консоль разработчика facebook API, заголовки обратного вызова в коде сервера или javascript, инициирующие вызов? Я потратил много времени на изменение заголовков сервера, но ошибка по-прежнему сохраняется как проблема CORS.

Происхождение в моем запросе заголовок имеет нулевое значение, что-то рассмотреть?

редактировать не добавлено No-Корс результат режима.

FBLogin 302 text/html SessionActions.js?524b:35 736 B 5 ms
oauth?client_id=154335&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2FFBLogin%2FCallback&D 302 text/html
http://localhost:7001/FBLogin 611 B 57 ms
login.php?skip_api_login=1&api_key=154335 200
Все три вызова были успешными, но никогда не был перенаправлен на страницу OAuth, даже если он так сказал. Тип ответа был «непрозрачным» со статусом 0.

+0

Не уверен, что это поможет, поскольку я не могу найти способ установить «режим запроса», но это может помочь вам понять, что нужно сделать. В принципе, ваши заголовки не проблема. Проблемы возникают в заголовках ответов, которые должны указывать, что вам разрешено загружать страницу. Если в списке не указано «Access-Control-Allow-Origin», домен, запрашивающий ресурс, браузер должен блокировать этот ответ. Ошибка утверждает, что вы можете установить режим «no-cors» для вашего запроса, это то, что нужно сделать. Позволяя время, я прочитаю источник Request.go и попытаюсь обеспечить фактическую реализацию. – evanmcdonnal

+0

Еще одна вещь, это определенно не вариант по запросу. Я рекомендую проверить «Клиент» и «RoundTripper». Последнее является интерфейсом, и вы можете заменить тот, который используется с вашей собственной реализацией, вероятно, решение потребует от вас этого. – evanmcdonnal

+0

В заголовках запроса, должно ли происхождение быть «localhost: 7001», а не null? Или проблема заключается в том, что ссылка facebook oauth не является whitelisting для любых доменов, потому что у нее нет заголовка «Access-control-allow-origin»? – goda

ответ

0

Сетевая трассировка, использующая wirehark или tcpdump, может помочь найти, что происходит или захватить трафик http, используя любой плагин firefox для записи заголовков в реальном времени.

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