2016-02-29 4 views
1

Я разрабатываю веб-приложение Python и использую флеш-фрейм для связи с API Shapeways.com. Я использую module provided by Shapeways для подключения. Я в состоянии проверить подлинность (АНИ использует OAuth v1), используя следующие шаги из the module's docs:Как я могу подключиться к API Shapeways.com более одного раза?

  1. Создать клиент
  2. Подключения к API и получить запрос маркеров и проверку подлинности URL
  3. Послать пользователь для проверки подлинности URL
  4. Проверка обратного вызова из URL аутентификации

можно затем загрузить 3D модели и чтения данных из существующих моделей в учетной записи пользователя.

Однако, если я обновляю страницу после подключения, я больше не могу получить URL-адрес из метода connect() модуля. Я должен перезапустить скрипт (или перезапустить Apache при использовании mod_wsgi), прежде чем я смогу получить новый URL. Вот урезанный пример:

from flask import Flask, request, redirect 
from urllib.parse import urlencode 
import urllib.parse 
from shapeways.client import Client 

consumer_key = [my app's key] 
consumer_secret = [my app's secret] 
callback_url = "http://127.0.0.1:5000/callback" 
client = Client(consumer_key, consumer_secret, callback_url) 

app = Flask(__name__) 

app.debug = True 
app.secret_key = "FZ\x96\xf0\x94\xa0:\xe2\x9a&\x88\xc3\x1c\xdf\xfc\x83`gw.\xab\x83\xf1d" 

@app.route("/") 
def root(): 
    url = client.connect() 
    return redirect(url, code=302) 

@app.route("/callback") 
def callback(): 
    oauth_token = request.args.get("oauth_token", 0, type=str) 
    oauth_verifier = request.args.get("oauth_verifier", 0, type=str) 
    client.verify(oauth_token, oauth_verifier) 
    info = client.get_api_info() 
    return str(info) 

if __name__ == "__main__": 
    app.run(debug=True) 

Первый раз, когда я загрузить страницу, connect() получает запрос маркер и URL из API и перенаправляет меня Shapeways.com, где я войти в систему и дать разрешение. Затем эта страница перенаправляется на URL-адрес обратного вызова, где выполняется верификация.

Если я перезагружаю страницу, client.connect() возвращает None. То же самое происходит, если я пытаюсь получить доступ к странице из другого браузера.

Я использую API (или флягу) неправильно? Что я должен изменить, чтобы приложение не позволяло одному пользователю войти в систему? Что еще я мог бы попробовать отладить эту проблему?

ответ

0

Похоже, что Shapeways Client строит один клиент, которым вы занимаетесь танцем OAuth. Поэтому вы не должны ожидать, что новые клиенты будут создаваться каждый раз, когда вы «подключаетесь», один клиент уже установлен и проверен, а Shapeways ожидает, что вы будете повторно использовать этот клиент для связи с их API.

+0

Ahhh ... звучит многообещающе. Благодарю. Я попробую, чтобы этот вечер и отметили, если он делает трюк. – user2950747

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