Rails集成QuickBook OAuth2提示redirect_uri参数无效如何解决
问题排查与修复方案
核心错误原因
redirect_uri报错本质是OAuth2授权流程中,发起授权请求时传递的redirect_uri、换取access_token时传递的redirect_uri、Intuit开发者后台配置的重定向URI三者必须完全一致,你的代码里存在多处不匹配问题:
1. 授权请求中redirect_uri传值错误
你在authenticate方法里错误使用了授权接口自身的地址作为redirect_uri,实际应该传入用户授权后回调的oauth_callback地址。
2. 回调方法残留OAuth1废弃代码
OAuth2流程不需要session[:qb_request_token]相关逻辑,这行冗余代码会引发额外报错。
3. 重定向地址未匹配后台配置
本地测试时需要确保你在Intuit开发者后台配置的重定向URI和代码中使用的地址完全一致,包括协议、域名、端口、路径。
修正代码
控制器代码修正
def authenticate # 直接使用路由生成的完整回调地址,不需要手动拼接,避免写错 redirect_uri = oauth_callback_vendors_url grant_url = ::QB_OAUTH2_CONSUMER.auth_code.authorize_url( redirect_uri: redirect_uri, response_type: "code", state: SecureRandom.hex(12), scope: "com.intuit.quickbooks.accounting" ) redirect_to grant_url end def oauth_callback # 这里的redirect_uri必须和授权时传的完全一致 redirect_uri = oauth_callback_vendors_url resp = ::QB_OAUTH2_CONSUMER.auth_code.get_token(params[:code], redirect_uri: redirect_uri) # 删除原来的OAuth1冗余代码 quickbooks_credentials.update_attributes( access_token: resp.token, refresh_token: resp.refresh_token, realm_id: params[:realmId] ) # 建议补充跳转逻辑,比如跳转到vendors列表页 redirect_to vendors_path, notice: "QuickBooks授权成功" end
必须检查的配置项
登录Intuit开发者后台,找到你的应用配置页,在OAuth2设置的「重定向URI」列表中,精确添加你本地测试用的回调地址:http://localhost:3000/vendors/oauth_callback
如果是生产环境,需要对应添加生产域名的回调地址。
内容的提问来源于stack exchange,提问作者SkRoR
相关产品推荐
相关产品推荐

