将参数传递给服务器(Stripe Connect中的oAuth回调)

Joh*_*ews 1 javascript oauth node.js angularjs stripe-payments

我设立条纹连接的解释这里(独立账户).我处理access_token我的节点服务器上的授权和检索.

用户可以访问该链接MY_SERVER_URI/authorize,并将被重定向到预定义的条带AUTHORIZE_URI:

app.get("/authorize", function(req, res) {
  // Redirect to Stripe /oauth/authorize endpoint
  res.redirect(AUTHORIZE_URI + "?" + qs.stringify({
    response_type: "code",
    scope: "read_write",
    client_id: CLIENT_ID
  }));
});
Run Code Online (Sandbox Code Playgroud)

用户授权Stripe Connect后,他或她将被重定向到预定义的REDIRECT_URI,在这种情况下等于MY_SERVER_URI/oauth/callback,执行以下脚本:

app.get("/oauth/callback", function(req, res) {

  var code = req.query.code;

  // Make /oauth/token endpoint POST request
  request.post({
    url: TOKEN_URI,
    form: {
      grant_type: "authorization_code",
      client_id: CLIENT_ID,
      code: code,
      client_secret: API_KEY
    }
  }, function(err, r, body) {

    var accessToken = JSON.parse(body).access_token;

    // Do something with your accessToken

    // For demo"s sake, output in response:
    res.send({ "Your Token": accessToken });

  });
});
Run Code Online (Sandbox Code Playgroud)

现在这里的一切正常,应用程序能够得到accessToken.但是,这accessToken需要保存并与从客户端授予访问权限的用户匹配.

因此,我的问题归结为,如何在oauth/callback GET请求中传递客户端参数(如客户端userId),或者在客户端处理服务器处理(例如$http GET请求而不是访问uri)?我想后者不是推荐的选项.

我做了两次尝试:

  • 我尝试使用动态传递参数REDIRECT_URI,但问题是Stripe要求首先指定alle url(导致重定向url中不能传递任何参数).
  • 我试图访问MY_STRIPE_URI/authorize带有$http GET请求,但这给了我明显的错误请求的资源上没有'Access-Control-Allow-Origin'标头

可以做些什么?

小智 10

您必须将您的用户ID作为"state"参数传递,Stripe将在回调时返回它.我发现避免会话的唯一方法

  • 我不会将用户ID作为"状态"传递,而是为您的用户提供某种识别令牌.否则,当我被重定向到创建我的条带帐户时,我可以通过https://connect.stripe.com/oauth替换网址https://connect.stripe.com/oauth/authorize?response_type=code&scope=read_write&client_id=xyz123&state=1/authorize?response_type = code&scope = read_write&client_id = xyz123&state = 2,我的令牌将注册用户2而不是用户1 (6认同)