再会。
我有烧瓶舞的问题,使用 github oauth。这是我的代码:
from flask import Flask, redirect, url_for
from flask_dance.contrib.github import make_github_blueprint, github
app = Flask(__name__)
app.secret_key = "supersekrit6546ihugf98779"
blueprint = make_github_blueprint(
client_id="9f5534a3e8dd8a7f612b",
client_secret="c91568077277c22cf44e095952b96f4250524a7b",
)
app.register_blueprint(blueprint, url_prefix="/auth")
@app.route("/")
def index():
if not github.authorized:
return redirect(url_for("github.login"))
resp = github.get("/user")
assert resp.ok
return "You are @{login} on GitHub".format(login=resp.json()["login"])
github 蓝图注册了两个端点:
GET /auth/github/
GET /auth/github/authorized/
这发生在内部,问题是,在这个简单的设置中,GET /auth/github/端点返回 404 not found 错误。这运行得很好,但是在开发过程中你犯了一个错误并创建了类似递归循环或类似的东西:
127.0.0.1 - - [26/Dec/2019 01:09:24] "GET /github/ HTTP/1.1" 302 -
127.0.0.1 - - [26/Dec/2019 01:09:24] "GET /auth/github/ HTTP/1.1" 404 -
127.0.0.1 - - [26/Dec/2019 01:09:36] "GET /github/ HTTP/1.1" 302 -
127.0.0.1 - - [26/Dec/2019 01:09:36] "GET /auth/github/ HTTP/1.1" 404 -
127.0.0.1 - - [26/Dec/2019 01:10:07] "GET /github/ HTTP/1.1" 302 -
127.0.0.1 - - [26/Dec/2019 01:10:07] "GET /auth/github/ HTTP/1.1" 404 -
这种情况发生过一次,当尝试测试登录时,flask 应用程序一次吐出所有日志,总共三个请求。从那时到这里,我的烧瓶应用程序再也无法工作,而不是正常流程:
127.0.0.1 - - [26/Dec/2019 00:13:24] "GET /github/ HTTP/1.1" 302 -
127.0.0.1 - - [26/Dec/2019 00:13:24] "GET /auth/github HTTP/1.1" 302 -
127.0.0.1 - - [26/Dec/2019 00:13:29] "GET /auth/github/authorized?code=4f89165770b11a7adbf0&state=M1M7ImawYggug4Vz98B49nYmvEwOpc HTTP/1.1" 302 -
我得到这个流程:
127.0.0.1 - - [26/Dec/2019 01:11:27] "GET /github/ HTTP/1.1" 302 -
127.0.0.1 - - [26/Dec/2019 01:11:27] "GET /auth/github/ HTTP/1.1" 404 -
请不要让自己被 github oauth 应用程序的不匹配客户端 ID 引导,我在测试中更改了所有这些以尝试解决此问题,而是采用登录过程的一般流程:登录路径 - >烧瓶舞登录路径-> 带有 args 的烧瓶舞登录路线,以便 GitHub 工作。还将应用程序减少到最低限度,实际上这是用于入门的烧瓶舞蹈示例代码,因此日志中的端点不匹配。
这很奇怪,因为当我打印 app.url_map 时,我得到了正确的结果:
Map([
<Rule '/auth/github/authorized' (GET, OPTIONS, HEAD) -> github.authorized>,
<Rule '/auth/github' (GET, OPTIONS, HEAD) -> github.login>,
<Rule '/' (GET, OPTIONS, HEAD) -> index>,
<Rule '/static/<filename>' (GET, OPTIONS, HEAD) -> static>
])
如您所见,“/”是此测试应用程序中的登录入口点。
我目前正在开发一个主要应用程序,这也发生在那里,我首先想到的是禁止 github,所以我删除了 github oauth 应用程序并创建了一个新应用程序,但这并不能解决问题。我仍然认为某种类型的禁令适用于我,但我不确定我的强硬是否正确。也许禁令适用于我的 IP 但也不确定,无法在我的网络之外进行测试。