具有OAUTH2和Salesforce的NodeJS HapiJS(force.com)

时间:2016-03-11 04:39:24

标签: javascript node.js oauth-2.0 salesforce hapijs

Hello bell / hapi开发人员和/或专家......请提前感谢您提出任何建议......我正在尝试为oauth完成强制通信战略(salesforce),而且它几乎正常运行,而且我无法找到错误的任何文档。

我收到错误" [错误:无法获取自定义访问令牌]"

我的应用程序正确地重定向到salesforce,提示在Salesforce域上登录,进行身份验证并正确返回到回调URL,但是,回调URL路由/控制器失败,因为" isAuthenticated"是假的,但我可以在请求中看到,从salesforce返回到回调的URL包含一个"代码"参数(auth访问令牌和"状态"值。)

这是我的策略



// Register bell with the server
server.register(require('bell'), function(err) {
  server.auth.strategy('forcedotcom', 'bell', {
    provider: {
      protocol: 'oauth2',
      useParamsAuth: false,
      auth: config.forcedotcom.authURL,
      token: config.forcedotcom.tokenURL
    },
    isSecure: false,
    clientId: config.forcedotcom.clientID,
    clientSecret: config.forcedotcom.clientSecret,
    password: config.sessionCookie.sessionSecret,
    location: config.forcedotcom.callbackURL
  });
});




这是回调路由(在callbackURL的配置中指定



server.route({
  method: ['GET', 'POST'],
  path: '/auth/forcedotcom/callback',
  config: {
    auth: {
      strategy: 'forcedotcom',
      mode: 'try'
    },
    handler: function(request, reply) {
      console.warn('request', request, 'reply', reply);
      if (!request.auth.isAuthenticated) {
        return reply('Authentication failed due to: ' + request.auth.error.message);
      }

      return reply.redirect('/');
    }
  }
});




任何方向都会令人惊叹。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您需要将useParamAuth设置为true。 Salesforce要求client_secretclient_id是查询参数而不是标题。

你也可以尝试这个库https://www.npmjs.com/package/hapi-salesforce-auth-suite,其中包括signrequest auth和oauth。