向服务器传递参数(Stripe Connect 中的 oAuth 回调)
Passing parameters to the server (oAuth callback in Stripe Connect)
我正在按照说明设置 Stripe Connect here(独立帐户)。我在我的节点服务器上处理 access_token
的授权和检索。
用户可以访问 link 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 urls
首先(导致不能在重定向中传递任何参数
url).
- 我试图通过
$http
GET
请求访问 MY_STRIPE_URI/authorize
,但这给了我明显的错误 No 'Access-Control-Allow-Origin' header is present在请求的资源上
可以做什么?
一般你的场景是这样的:
- 向您服务器上的某个路由发出请求并将用户 ID 存储在那里:
req.session.user = {id: '...'}
- 从该路由将用户重定向到第三方授权 URL
- 在接收访问令牌的路由中,也将其存储在会话中:
req.session.user.access_token = '...'
- 对该 Stripe 的后续请求使用该访问令牌 API
注:
您必须将您的用户 ID 作为 "state" 参数传递,Stripe 将在回调中 return 它。我发现避免 session
的唯一方法
我正在按照说明设置 Stripe Connect here(独立帐户)。我在我的节点服务器上处理 access_token
的授权和检索。
用户可以访问 link 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 urls 首先(导致不能在重定向中传递任何参数 url). - 我试图通过
$http
GET
请求访问MY_STRIPE_URI/authorize
,但这给了我明显的错误 No 'Access-Control-Allow-Origin' header is present在请求的资源上
可以做什么?
一般你的场景是这样的:
- 向您服务器上的某个路由发出请求并将用户 ID 存储在那里:
req.session.user = {id: '...'}
- 从该路由将用户重定向到第三方授权 URL
- 在接收访问令牌的路由中,也将其存储在会话中:
req.session.user.access_token = '...'
- 对该 Stripe 的后续请求使用该访问令牌 API
注:
您必须将您的用户 ID 作为 "state" 参数传递,Stripe 将在回调中 return 它。我发现避免 session
的唯一方法