You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Flask开发Discord Bot仪表盘时,Discord OAuth授权登录重定向后触发404错误

问题根因排查
  • 回调路由缺失:oauth.py中配置的授权回调地址是http://127.0.0.1:5000/login.html,但main.py里从未注册过/login.html路径的处理函数,Discord授权完成后跳转的目标地址没有对应路由,自然触发404。
  • 路由重复注册冲突:main.py中home(首页)和login(回调处理)两个函数都绑定了@app.route("/")根路由,Flask会以最后注册的路由规则为准,原首页逻辑会被覆盖,还会导致路径匹配逻辑混乱。
  • 参数编码错误:oauth.py中scope字段直接使用了URL编码后的字符串guilds%20identify%20email,调用requests发POST请求时会被二次编码,导致后续换取access_token的流程报错。
修复操作步骤

1. 调整main.py路由配置

把OAuth回调逻辑绑定到和配置完全一致的/login.html路径,和首页根路由分离:

from flask import Flask, render_template, request, session, redirect
from oauth import Oauth

app = Flask(__name__)
app.config["SECRET_KEY"] = "PRIVATE"

# 首页路由,保留原有根路径逻辑
@app.route("/")
def home():
    return render_template("index.html", discord_url=Oauth.discord_login_url)

# OAuth回调路由,路径与配置的redirect_uri完全对齐
@app.route("/login.html")
def login():
    # 兜底:没有拿到授权码时直接跳回首页
    code = request.args.get("code")
    if not code:
        return redirect("/")
    
    access_token = Oauth.get_access_token(code)
    session["token"] = access_token
    user_info = Oauth.get_user_json(access_token)
    username = user_info.get("username")
    user_discrim = user_info.get("discriminator")
    
    return render_template("login.html", username=username, userdiscrim=user_discrim)

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

2. 修正oauth.py配置

  • 把scope字段改回未编码的原始字符串,交给requests自动处理URL编码,避免手动转义带来的二次编码问题
  • 确认redirect_uri的地址和Discord开发者后台OAuth2板块填写的重定向URI完全一致(包括协议、端口、路径大小写,差一个字符都会跳转失败)

修改后的核心配置片段:

class Oauth:
    client_id = "你的Discord Bot客户端ID"
    client_secret = "你的Discord Bot客户端密钥"
    redirect_uri = "http://127.0.0.1:5000/login.html"
    # 不要手动写%20的编码,直接用空格即可
    scope = "guilds identify email"
    discord_login_url = "拼接完成的Discord授权入口地址"
    discord_token_url = "https://discord.com/api/oauth2/token"
    discord_api_url = "https://discord.com/api"
额外校验项
  • 确认templates目录下和index.html同级存在login.html文件,不要把模板文件放在static文件夹内,否则render_template无法找到文件也会触发404
  • 调试时可观察终端的请求日志,404报错时会明确打印请求的目标路径,对照已注册的路由规则即可快速定位不匹配的问题

内容的提问来源于stack exchange,提问作者user14949429

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 12:06:06