Flocks CORS - нет заголовка заголовка Access-control-allow-origin, присутствующего при перенаправлении()

Я внедряю пользовательский знак пользователя OAuth Twitter (API-интерфейс Flask и Angular)

Я продолжаю получать следующую ошибку, когда я нажимаю знак с помощью кнопки Twitter и открывается всплывающее окно:

XMLHttpRequest cannot load https://api.twitter.com/oauth/authenticate?oauth_token=r-euFwAAAAAAgJsmAAABTp8VCiE. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Я использую пакеты python-Cors для обработки CORS, и у меня уже есть знак instagram, который работает правильно. Я считаю, что это связано с тем, что ответ является перенаправлением, но не смог исправить проблему.

Мой код флага выглядит так:

app = Flask(__name__, static_url_path='', static_folder=client_path)
cors = CORS(app, allow_headers='Content-Type', CORS_SEND_WILDCARD=True)
app.config.from_object('config')

@app.route('/auth/twitter', methods=['POST','OPTIONS'])
@cross_origin(origins='*', send_wildcard=True)
#@crossdomain(origin='')
def twitter():
    request_token_url = 'https://api.twitter.com/oauth/request_token'
    access_token_url = 'https://api.twitter.com/oauth/access_token'
    authenticate_url = 'https://api.twitter.com/oauth/authenticate'

    # print request.headers

    if request.args.get('oauth_token') and request.args.get('oauth_verifier'):
        -- omitted for brevity --
    else:
        oauth = OAuth1(app.config['TWITTER_CONSUMER_KEY'],
                       client_secret=app.config['TWITTER_CONSUMER_SECRET'],
                       callback_uri=app.config['TWITTER_CALLBACK_URL'])
        r = requests.post(request_token_url, auth=oauth)
        oauth_token = dict(parse_qsl(r.text))
        qs = urlencode(dict(oauth_token=oauth_token['oauth_token']))
        return redirect(authenticate_url + '?' + qs)

Ответ 1

Проблема не ваша. Ваше клиентское приложение отправляет запросы в Twitter, поэтому вам не нужно поддерживать CORS, это Twitter. Но API Twitter в настоящее время не поддерживает CORS, что фактически означает, что вы не можете напрямую разговаривать с ним из браузера.

Общей практикой во избежание этой проблемы является то, чтобы приложение на стороне клиента отправляло запросы на аутентификацию на собственный сервер (например, это приложение Flask, которое у вас есть), и, в свою очередь, сервер подключается к API Twitter, Поскольку серверная сторона не связана с требованиями CORS, проблем нет.

Если вам нужны какие-то идеи, я написал статью в блоге об этом типе потока аутентификации для Facebook и Twitter: http://blog.miguelgrinberg.com/post/oauth-authentication-with-flask