Nightbot API认证redirect_uri问题:无需搭建服务器的解决方案咨询
解决Nightbot OAuth2认证无服务器方案及参数错误问题
先解决当前报错
你现在弹出的「Missing required OAuth2 parameter(s)」提示,主要有两个原因:
redirect_uri参数为空——Nightbot OAuth2流程要求这个参数必须填写,且要和你在Nightbot开发者控制台创建应用时配置的Redirect URI完全一致。- 参数名写错了——你代码里的
stat应该是state,这是OAuth2要求的必填参数之一。
无需搭建公网服务器的两种方案
方案1:本地回调捕获令牌(自动完成流程)
适合需要多次快速获取令牌的场景,用本地临时HTTP服务器捕获授权回调:
- 登录Nightbot开发者后台,把你的应用Redirect URI设置为
http://localhost:8080(或http://127.0.0.1:8080,保持和代码一致即可)。 - 替换并运行以下代码:
import webbrowser import urllib.parse from http.server import BaseHTTPRequestHandler, HTTPServer # 替换成你的信息 client_id = "你的Client ID" client_secret = "你的Client Secret" # 按你需求直接写入 redirect_uri = "http://localhost:8080" scope = "channel_send commands" # 本地服务器处理回调 class OAuthHandler(BaseHTTPRequestHandler): def do_GET(self): # 解析回调URL中的令牌参数 hash_part = self.path.split('#')[1] if '#' in self.path else '' params = urllib.parse.parse_qs(hash_part) if 'access_token' in params: access_token = params['access_token'][0] self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(f"<html><body>授权成功!Token:<b>{access_token}</b></body></html>".encode()) print(f"已获取Token:{access_token}") # 拿到令牌后关闭服务器 server.shutdown() else: self.send_response(400) self.end_headers() self.wfile.write(b"授权失败,未获取到令牌") # 构造授权URL auth_params = { 'client_id': client_id, 'redirect_uri': redirect_uri, 'response_type': 'token', 'scope': scope, 'state': 'test' } auth_url = 'https://api.nightbot.tv/oauth2/authorize?' + urllib.parse.urlencode(auth_params) # 打开浏览器发起授权 webbrowser.open(auth_url) # 启动本地服务器等待回调 server = HTTPServer(('localhost', 8080), OAuthHandler) print("等待授权完成...") server.serve_forever()
方案2:手动获取令牌(极简操作)
如果只用几次,直接手动拿令牌最省事:
- 把你的Client ID替换到以下URL里,在浏览器打开:
https://api.nightbot.tv/oauth2/authorize?client_id=你的Client ID&redirect_uri=http://localhost&response_type=token&scope=channel_send commands&state=test - 登录并授权后,浏览器会跳转到
http://localhost#access_token=xxx&token_type=bearer&expires_in=xxx,直接从URL的哈希部分复制access_token的值。 - 把这个Token直接写在脚本里调用API即可(令牌有过期时间,过期后重复上述步骤重新获取)。
关于client_secret的风险说明
直接把client_secret写在代码里,若代码被他人获取,对方可以用你的应用身份获取更多授权令牌,操作你的Nightbot权限。但仅限你和信任的人使用、不泄露代码的前提下,风险几乎可以忽略。
内容的提问来源于stack exchange,提问作者Xoriun
相关产品推荐
相关产品推荐

