2015-07-18 22 views
11

Ben (Şişe API ve Açısal)Flask CORS - yeniden yönlendirme()

Ben Tıkladığımda aşağıdaki hata almaya devam OAuth Twitter'da Kullanıcı işareti uygulayan am üzerinde hiçbir Erişim kontrol-izin-kökenli başlık mevcut twitter düğmesi ve bir pop up pencere ile oturum açılır:

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. 

Ben CORS'yi işlemek için piton-CORS paketleri kullanıyorum, ve zaten doğru çalışma instagram işareti var. Yanıtın bir yönlendirme olmakla ilgili olduğunu, ancak sorunu çözemediğine inanıyorum.

Benim şişe kodu şöyle:

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) 

cevap

8

sorun senin değil. İstemci tarafındaki uygulamanız Twitter'a istek gönderiyor, bu yüzden CORS'i desteklemeniz gerekmiyor, Twitter. Ancak Twitter API'sı şu anda CORS'i desteklememektedir; bu, doğrudan tarayıcıdan konuşamayacağınız anlamına gelir.

Bu sorunu önlemek için yaygın olarak kullanılan bir uygulama, istemci tarafındaki uygulamanızın kendi kimlik doğrulaması isteklerini kendi sunucunuza göndermesi (örneğin, sahip olduğunuz bu aynı Flask uygulaması gibi) ve sunucunun da Twitter'a bağlanmasıdır. API. Sunucu tarafı CORS gereksinimlerine bağlı olmadığından sorun yoktur. http://blog.miguelgrinberg.com/post/oauth-authentication-with-flask

+0

Sana yayınlanan makalesinde sağlanan sizin repo çatallı:

Eğer bazı fikirler, ben Facebook ve Twitter için kimlik doğrulama akışının bu tür yapmayı bir blog makale yazdım istiyorum. Ancak istemci tarafında aynı hatayı al. 'XMLHttpRequest, https://api.twitter.com/oauth/authorize?oauth_token=FozjZwAAAAAAgJsmAAABTqljgg0 dosyasını yükleyemez. İstenen kaynağa Access-Control-Allow-Origin 'başlığı yok. Origin 'null' bu nedenle erişime izin verilmiyor. ' –

+0

Olduğu gibi, istemci farklı bir etki alanının (Flask API) yetkilendirmesi/twitter sunucusuna bir posta isteği gönderiyor ama gönderiyor, sonra twitter yönlendirmesini döndürüyor. İstemci uygulamasındaki hata mesajına bakın –

+0

Bana gösterdiğiniz hata, tarayıcının doğrudan Twitter API'sine bir istek göndermesini öneriyor, dolayısıyla ne söylediğinizle aynı fikirde değil. Hata mesajında ​​URL https: //api.twitter.com/... olduğunu unutmayın. Eğitmenimdeki uygulama asla Ajax isteklerini doğrudan sağlayıcıya göndermektedir, tüm istekler Flask uygulamasından geçmektedir (ki bu da müşteri tarafında uygulama ile aynı alanda hizmet vermekteyim). – Miguel

İlgili konular