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

时间:2015-10-18 15:00:28

标签: javascript angularjs node.js oauth stripe-payments

我按照here(独立帐户)说明设置了Stripe Connect。我在节点服务器上处理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
  }));
});

用户授权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 });

  });
});

现在这里的一切正常,应用程序可以获得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'标头存在在请求的资源上

可以做些什么?

2 个答案:

答案 0 :(得分:10)

您必须将您的用户ID传递为"州"参数和Stripe将在回调中返回它。我发现避免会话的唯一方法

答案 1 :(得分:1)

通常情况如下:

  1. 向您服务器上的某些路线发出请求,并在其中存储用户的ID:req.session.user = {id: '...'}
  2. 从该路线将用户重定向到第三方授权网址
  3. 在您收到访问令牌的路线中,也将其存储在会话中:req.session.user.access_token = '...'
  4. 将该访问令牌用于后续对Stripe API的请求
  5. 注意:

    1. 请勿尝试破解authorization_code OAuth流程
    2. 您可能会发现Grant更易于用于此类型的OAuth流程,Stripe受支持
    3. 相关comment