如何使用jsforce续订salesforce会话?

时间:2014-10-04 05:26:52

标签: node.js salesforce

我正在使用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操作,那么呼叫失败。我很确定会话已经过期了。

现在我有两个问题

  1. 使用我拥有的输入连接详细信息,以上是否正确连接到salesforce?
  2. 我如何知道会话已过期并进行新会话?
  3. PS 我尝试使用刷新令牌查看访问令牌,但这仅适用于OAuth2授权代码流。

2 个答案:

答案 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);
 }
};