我正在使用jsforce节点模块在salesforce中执行CRUD操作。
为了建立与salesforce的连接,我有以下输入
用户名,密码,securityToken和loginUrl。
这是我第一次建立连接的方式。
var conn = new jsforce.Connection({
loginUrl: connectionDetails.salesforce.loginUrl
});
conn.login(connectionDetails.salesforce.username,
connectionDetails.salesforce.password + connectionDetails.salesforce.securityToken,
function(err, userInfo) {
if (!err) {
console.log('User with user id ' + userInfo.id + ' successfully logged into Salesforce');
successCb(conn.accessToken, conn.instanceUrl);
} else {
console.log('Login failed to https://test.salesforce.com/');
errorCb('Login failed to https://test.salesforce.com/');
}
});
我将accessToken和Instanceurl存储在Express提供的req对象中。
之后我执行任何CRUD操作,如下所示
var salesConn = new jsforce.Connection({
accessToken: salesforceAccessToken,
instanceUrl: salesforceInstanceUrl
});
salesConn.sobject('Lead').retrieve(someLeadID, function(err, data) {
...
});
现在假设我让我的服务器闲置几个小时或甚至一天,然后如果我进行CRUD操作,那么呼叫失败。我很确定会话已经过期了。
现在我有两个问题
PS 我尝试使用刷新令牌查看访问令牌,但这仅适用于OAuth2授权代码流。
答案 0 :(得分:1)
有点晚了,但今天我遇到了同样的问题,每当我收到无效的会话错误时,我都会通过调用conn.login(username, password+token)
修复它。
我正在做一些与众不同的事情,我不会创建第二个变量来与我的SF调用一起使用,而是使用原始的conn
变量conn.sobject(...)
。
答案 1 :(得分:0)
它会自动刷新令牌。
我的jsforce版本是"jsforce": "^1.4.1"
jsforce有_refreshDelegate
Connection.prototype.login = function(username, password, callback) {
// register refreshDelegate for session expiration
this._refreshDelegate = new HttpApi.SessionRefreshDelegate(this, createUsernamePasswordRefreshFn(username, password));
if (this.oauth2 && this.oauth2.clientId && this.oauth2.clientSecret) {
return this.loginByOAuth2(username, password, callback);
} else {
return this.loginBySoap(username, password, callback);
}
};