Javascript 向服务器传递参数(条带连接中的oAuth回调)
我正在按说明设置Stripe Connect(独立帐户)。我在节点服务器上处理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 + "?" +
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对象),同时保持安全。如果您使用的是云函数,并且没有会话状态,那么这种方法非常有效