如何让eBay向Shopify Node应用发送OAuth令牌?
解决Shopify Node应用模板允许eBay OAuth回调访问的问题
跳过指定端点的Shopify认证拦截
Shopify Node模板默认会对所有路由应用Shopify的认证中间件,外部请求(比如eBay的回调)没有Shopify的认证信息,自然会被拦截。你需要在web/index.js里,给/ebay/auth/accepted端点单独配置,不经过Shopify的认证中间件。举个例子,原来的路由如果是全局挂载认证中间件:
app.use(shopify.authenticate.admin()); app.get('/ebay/auth/accepted', (req, res) => { /* 你的逻辑 */ });改成将认证中间件只应用到需要的路由,给eBay回调路由放行:
// 仅给需要Shopify认证的路由挂载中间件 app.get('/', shopify.authenticate.admin(), (req, res) => { /* 原首页逻辑 */ }); // eBay回调路由跳过Shopify认证 app.get('/ebay/auth/accepted', (req, res) => { // 这里处理eBay返回的授权码,请求访问令牌 const { code } = req.query; // 调用eBay令牌接口,将令牌关联到当前店铺存储(比如数据库或Shopify会话) res.send('eBay授权完成'); });要是用了路由分组,确保这个回调路由不在认证中间件的作用范围内即可。
确认开发环境的可访问性
npm run dev生成的可共享URL是ngrok提供的,只要ngrok进程没中断,这个URL就能被外部访问。注意每次重启dev服务,ngrok URL可能会变化,要同步更新eBay开发者后台的重定向地址。令牌的存储处理
拿到eBay的令牌后,建议关联到当前Shopify店铺的会话或者数据库中(绑定店铺ID)。Shopify的会话是加密的,你可以直接用req.session存储:req.session.ebayTokens = { access_token: 'xxx', refresh_token: 'yyy' };后续调用eBay API时,从会话或数据库取出令牌即可。
测试端点有效性
修改路由后,直接在浏览器输入[你的ngrok URL]/ebay/auth/accepted,如果能正常返回响应,说明认证拦截已经解除。再去eBay后台配置这个URL作为重定向地址,测试完整的OAuth流程。
内容的提问来源于stack exchange,提问作者pup2093
相关产品推荐
相关产品推荐

