【问题标题】:How to renew a session of salesforce using jsforce?如何使用 jsforce 更新销售人员会话?
【发布时间】:2014-10-04 05:26:52
【问题描述】:

我正在使用 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. 如何知道会话已过期并创建新会话?

PS 我尝试使用 Refresh Token 查看 Access Token,但这仅适用于 OAuth2 授权代码流。

【问题讨论】:

    标签: node.js salesforce


    【解决方案1】:

    有点晚了,但我今天遇到了同样的问题,每当我收到无效会话错误时,我都会通过调用 conn.login(username, password+token) 来解决它。

    我正在做一些不同的事情,我没有创建第二个变量来与我的 SF 调用一起使用,而是使用原始的 conn 变量 conn.sobject(...)

    【讨论】:

      【解决方案2】:

      它会自动刷新令牌。 我的 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);
       }
      };
      

      【讨论】:

      • 感谢您的回复,但是我的应用没有启用 Oauth
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2012-09-12
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多