我有一个NodeJS应用程序,该应用程序实质上是将在Heroku上运行的工作进程。该应用程序使用oAuth端点进行授权,然后使用新建立的连接开始侦听数据流。
建立连接后,工作人员坐在那里聆听,我不确定刷新令牌的方式/时间。
为了使流接收数据,必须将其连接。但是一旦这个过程开始,就不会有任何页面更改的交互作用,我将传递此令牌。
示例代码:
var express = require('express');
var router = express.Router();
var jsforce = require('jsforce')
// Vars
var oauth2 = new jsforce.OAuth2({
loginUrl: 'https://example.my.salesforce.com',
clientId: 'redacted',
clientSecret: 'redacted',
redirectUri: 'http://localhost:3000/oauth2/callback'
});
var conn = new jsforce.Connection({ oauth2: oauth2 });
// Auth
router.get('/oauth2/auth', function (req, res) {
res.redirect(oauth2.getAuthorizationUrl());
});
// Callback with auth code
router.get('/oauth2/callback', function (req, res) {
var code = req.param('code');
conn.authorize(code, function (err, userInfo) {
if (err) { return console.error(err); }
console.log(conn.accessToken);
console.log(conn.refreshToken);
console.log(conn.instanceUrl);
console.log("User ID: " + userInfo.id);
console.log("Org ID: " + userInfo.organizationId);
startWorker();
res.status(200).send('begin');
});
});
// Start listening for stream
function startWorker() {
console.log('waiting for data...')
conn.streaming.topic("/event/heroku_notification__e").subscribe(function (message) {
console.dir(message);
});
}
module.exports = router;
在此示例中,我正在使用express
,以便可以进行必要的呼叫。我可能需要使用HTTP
库,因为这不是Web进程。
startWorker()
首次认证后开始,如何保持conn
的生命?我在/oauth2/callback
中获得了刷新令牌,但实际上没有什么可传递给我的,因为它只是打开一个流而不进行导航。