Flask-Dance:GitHub 找不到蓝图登录端点 404

Flask-Dance: GitHub blueprint login endpoint not found 404

美好的一天。

我在使用 github oauth 时遇到 flask-dance 问题。这是我的代码:

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/ 端点 returns 404 未找到错误。这运行得很好,但在开发过程中你犯了一个错误并创建了类似递归循环或类似的东西:

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 应用程序一次吐出所有日志,总共三个请求。从那时到这里,我的 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 所引导,我在测试中更改了所有那些以尝试解决此问题,而是采用登录过程的一般流程:登录路由 -> flask-dance 登录路由 -> flask-dance 登录路由,带参数 GitHub 工作。另外你把app减到最少,实际上这是flask dance入门的示例代码,所以日志中的端点不匹配。

这很奇怪,因为当我打印 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 但也不确定,无法在我的网络之外进行测试。

应用程序开始运行,但我不确定为什么。所以这不是任何类型的禁令,只是我的无知。