使用Passport Google认证时遇TokenError: Bad Request问题求助
排查Passport Google认证出现TokenError: Bad Request的原因
下面是几个大概率导致这个错误的点,按优先级排查:
1. Google云平台OAuth配置错误
- 检查ClientID和ClientSecret的完整性:你提供的
clientID末尾有多余的-,clientSecret看起来也像是被截断的,必须从Google Cloud Console的OAuth 2.0客户端ID页面复制完整字符串,不能有遗漏或多余字符。 - 回调URL完全匹配:确保
http://localhost:8080/auth/google/callback已经添加到Google Cloud控制台的「已授权重定向URI」列表里,注意必须完全一致——包括协议(http/https)、端口、路径,大小写也不能错。 - 客户端类型正确:创建OAuth客户端ID时,要选择「Web应用」类型,不能选桌面应用或其他类型,否则localhost的回调会被拒绝。
2. 代码中未正确调用done()方法
你的GoogleStrategy回调函数是空的,完全没调用done()方法,这会导致Passport无法完成认证流程,直接引发请求异常。必须在回调里处理用户逻辑后调用done():
async (accessToken, refreshToken, profile, done) => { try { // 示例:查找或创建用户 let user = await User.findOne({ googleId: profile.id }); if (!user) { user = await User.create({ googleId: profile.id, email: profile.emails[0].value, name: profile.displayName }); } // 调用done传递用户对象完成认证 done(null, user); } catch (err) { // 传递错误信息 done(err); } }
3. 本地服务端口与回调URL不匹配
确认你的后端服务确实运行在8080端口,如果后端是其他端口(比如3000),回调URL里的端口也要对应修改,同时同步更新Google Cloud的已授权重定向URI。
4. 相关API未启用
在Google Cloud Console的API库中,确保「People API」(或旧的Google+ API)已经启用,因为Passport获取用户profile信息需要调用这些API,未启用的话会导致授权失败。
内容的提问来源于stack exchange,提问作者jibzy
相关产品推荐
相关产品推荐

