2016-11-16 8 views
0

Я строю приложение с доступом в Dropbox, а authorization шаг возвращается No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access. The response had HTTP status code 400.CORS вопрос: ПОЛУЧИТЬ позвонить в Dropbox AUTH с использованием AJAX из Bootstrap модальный не работает

Приложение находится в HTML/JQuery/Bootstrap/Кордова.

В соответствии с documentation, я должен был быть в состоянии отправить simple cross-site request с использованием contentType: 'text/plain; charset=dropbox-cors-hack', но я получаю вышеуказанную ошибку.

client_id соответствует тому, что находится в моем Dropbox/myapp App key. redirect_uri соответствует тому, что находится в моем Dropbox/myapp Redirect URIs.

Вот мой код:

var client_id =   'matchesCodeInDropboxAppRegistration'; 
var response_type =  'token'; 
var redirect_uri = 'https://www.dropbox.com/1/oauth2/redirect_receiver'; 
//var csrfToken = generateCSRFToken(); 
var csrfToken =  'some_val'; // in process 
var data =  'response_type=' + response_type + '&client_id=' + client_id + '&redirect_uri=' + redirect_uri + '&state=' + csrfToken + '&reject_cors_preflight=true'; 

$.ajax({ 

    method: 'GET', 
    url: 'https://www.dropbox.com/1/oauth2/authorize?' + data, 
    contentType: 'text/plain; charset=dropbox-cors-hack', 

    success: function(html) { 

     $("#db-modal-body").html(html); 
    }, 

    error: function(jqXHR, textStatus, errorThrown) { 

     console.log("AdminDBAuthView: db_connect: fail:", textStatus, errorThrown, jqXHR); 
    } 
}); 

$("#dropbox-connect").modal("toggle"); 

Кстати, я попробовал это, и получил тот же результат:

$("#dropbox-connect").modal({ 
    remote: 'https://www.dropbox.com/1/oauth2/authorize?' + data, 
    show: true 
}); 

Backbone.js v1.3.3/ underscore.js v1.8.3/ самозагрузки v3.3.6/v2.2.4 JQuery/ Cordova v6.1.1/ Узел 5.10.1/NPM v3.8.6

Я некоторое время отстраняюсь от этого, поэтому любая помощь очень ценится.

+0

Какой браузер вы используете? – Jordan

+0

Похоже, что проблема с использованием AJAX для доступа к ресурсу HTTPS при загрузке страницы через HTTP, это, скорее всего, проблема. – Jordan

+0

@ Jordan Я работал в Chrome – royhink

ответ

0

Вы пытаетесь получить доступ к www.dropbox.com/1/oauth2/authorize через вызов AJAX, но на самом деле это веб-страница, к которой пользователь должен получить доступ непосредственно в своем браузере.

The documentation for /oauth2/authorize says:

Это не призыв это API, веб-страница, которая позволяет пользователю знак, чтобы Dropbox и авторизовать приложение.

Как таковой, он не позволяет CORS.

Вы можете найти более подробную информацию о OAuth потока авторизации приложение здесь:

https://www.dropbox.com/developers/reference/oauth-guide

+0

Исправить. Я начал с '$ (" # dropbox-connect ") .modal ({ remote: 'https://www.dropbox.com/1/oauth2/authorize?' + Данные, показать: true }); ' , но нет любви. Но это может быть проблема загрузки защищенной страницы в bootstrap modal. Я посмотрю. – royhink

0

Если вы проверяете простой запрос на redirect reciver for example вы увидите, что:

content-security-policy:default-src 'none' ; worker-src blob: ; style-src https://* 'unsafe-inline' 'unsafe-eval' ; connect-src https://* ws://127.0.0.1:*/ws ; child-src blob: ; img-src https://* data: blob: ; frame-src https://* carousel://* dbapi-6://* dbapi-7://* dbapi-8://* itms-apps://* itms-appss://* ; object-src https://cfl.dropboxstatic.com/static/ https://www.dropboxstatic.com/static/ 'self' https://flash.dropboxstatic.com https://swf.dropboxstatic.com https://dbxlocal.dropboxstatic.com ; media-src https://* blob: ; font-src https://* data: ; script-src 'unsafe-eval' https://www.dropbox.com/static/javascript/ https://www.dropbox.com/static/api/ https://cfl.dropboxstatic.com/static/javascript/ https://www.dropboxstatic.com/static/javascript/ https://cfl.dropboxstatic.com/static/api/ https://www.dropboxstatic.com/static/api/ https://www.google.com/recaptcha/api/ 'unsafe-inline' 'nonce-oewijAWrBU8hHBjx84Ta' ; 

и не упоминает о местное имя, но упоминание о connect-src https://* ws://127.0.0.1

Попробуйте изменить ваш URL-адрес на http://127.0.0.1

+0

У меня такая же ошибка. – royhink