Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向服务器传递参数(条带连接中的oAuth回调)_Javascript_Angularjs_Node.js_Oauth_Stripe Payments - Fatal编程技术网

Javascript 向服务器传递参数(条带连接中的oAuth回调)

Javascript 向服务器传递参数(条带连接中的oAuth回调),javascript,angularjs,node.js,oauth,stripe-payments,Javascript,Angularjs,Node.js,Oauth,Stripe Payments,我正在按说明设置Stripe Connect(独立帐户)。我在节点服务器上处理access\u令牌的授权和检索 用户可以访问链接MY\u SERVER\u URI/authorize,并将重定向到预定义的条带authorize\u URI: app.get("/authorize", function(req, res) { // Redirect to Stripe /oauth/authorize endpoint res.redirect(AUTHORIZE_URI + "?" +

我正在按说明设置Stripe Connect(独立帐户)。我在节点服务器上处理
access\u令牌的授权和检索

用户可以访问链接
MY\u SERVER\u URI/authorize
,并将重定向到预定义的条带
authorize\u 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后,他或她将被重定向到预定义的重定向URI,在本例中,该URI等于
MY\u SERVER\u 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
请求中传递客户端参数(如客户端用户ID),或者在客户端处理服务器处理(例如
$http
GET
请求而不是访问uri)?
我想后者不是推荐的选项

我做了两次尝试:

  • 我尝试使用动态
    重定向\u URI
    传递参数,但是 问题是Stripe需要指定所有URL 首先(导致重定向中无法传递任何参数) 网址)
  • 我试图使用
    $http
    GET
    请求访问
    MY_STRIPE\u URI/authorize
    ,但这给了我一个明显的错误,请求的资源上没有“access Control Allow Origin”头

可以做什么?

通常情况下,您的场景如下:

  • 向服务器上的某个路由发出请求并将用户id存储在那里:
    req.session.user={id:'…'}
  • 从该路由将用户重定向到第三方授权URL
  • 在接收访问令牌的路由中,也将其存储在会话中:
    req.session.user.access\u token='…'
  • 将该访问令牌用于对条带API的后续请求
  • 注:

  • 不要试图破解
    authorization\u code
    OAuth流
  • 您可能会发现这种类型的OAuth流更容易使用,因为它是受支持的
  • 相关的

  • 通常情况下,您的场景如下所示:

  • 向服务器上的某个路由发出请求并将用户id存储在那里:
    req.session.user={id:'…'}
  • 从该路由将用户重定向到第三方授权URL
  • 在接收访问令牌的路由中,也将其存储在会话中:
    req.session.user.access\u token='…'
  • 将该访问令牌用于对条带API的后续请求
  • 注:

  • 不要试图破解
    authorization\u code
    OAuth流
  • 您可能会发现这种类型的OAuth流更容易使用,因为它是受支持的
  • 相关的

  • 您必须将用户id作为“state”参数传递,Stripe将在回调时返回它。我找到的避免会话的唯一方法是,必须将用户id作为“state”参数传递,Stripe将在回调时返回它。我找到的唯一避免会话的方法听起来很有希望。但是,我得到了一个错误:TypeError:无法设置未定义的属性'user'(没有req.session???),那么,您需要先装载默认的或类似的属性。听起来很有希望。但是,我得到了一个错误:TypeError:无法设置未定义的属性'user'(没有req.session???)好吧,你需要先装载默认的或类似的。我不会将用户id作为“state”传递,而是为你的用户传递某种标识令牌。否则,当我被重定向以创建我的条带帐户时,我可以用替换url,我的令牌将注册到用户2而不是用户1。您可以使用类似JWT的东西来插入有效负载(本例中为变量的json对象),同时保持安全。如果您使用的是云函数,并且没有会话状态,那么这种方法非常有效。我不会将用户id作为“状态”传递,而是为您的用户传递某种标识令牌。否则,当我被重定向以创建我的条带帐户时,我可以用替换url,我的令牌将注册到用户2而不是用户1。您可以使用类似JWT的东西来插入有效负载(本例中为变量的json对象),同时保持安全。如果您使用的是云函数,并且没有会话状态,那么这种方法非常有效