我正在开发一个Python Web应用程序并使用Flask框架与Shapeways.com的API进行通信。我使用module provided by Shapeways进行连接。我可以使用the module's docs中的以下步骤进行身份验证(API使用OAuth v1):
然后,我可以上传3D模型并从用户帐户中的现有模型中读取数据。
但是,如果我在连接后刷新页面,我将无法再从模块的connect()
方法中获取网址。在获取新URL之前,我必须重新启动脚本(或在使用mod_wsgi时重新启动Apache)。这是一个精简的例子:
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()
从API获取请求令牌和URL,并将我重定向到Shapeways.com,我在那里登录并授予权限。该页面然后重定向到回调URL,在那里进行验证。
如果我重新加载页面,client.connect()
会返回None
。如果我尝试从其他浏览器访问该页面,也会发生同样的事情。
我是否错误地使用了API(或Flask)?我应该更改什么来阻止应用程序仅允许单个用户登录?我还可以尝试调试这个问题吗?
答案 0 :(得分:0)
看起来Shapeways Client
构建了一个单独的客户端,您正在为此做OAuth舞蹈。因此,您不应期望每次“连接”时都会构建新客户端,已经建立并验证了单个客户端,并且Shapeways希望您重用该客户端与其API进行通信。