带有 OAUTH2 和 Salesforce 的 NodeJS HapiJS (force.com)
NodeJS HapiJS with OAUTH2 and Salesforce (force.com)
你好 bell / hapi 开发人员 and/or 专家...预先感谢您的任何建议...我正在尝试为 oauth 完成一个 forcedotcom 策略 (salesforce),它几乎可以工作,我找不到任何关于该错误的文档。
我收到错误消息“[错误:获取自定义访问令牌失败]”
我的应用程序正确重定向到 Salesforce,提示登录 Salesforce 域,进行身份验证,并正确 returns 返回回调 URL,然而,回调 url route/controller,失败,因为 "isAuthenticated" 是假的,但我可以在请求中看到,从 salesforce 返回到回调的 URL 包含一个 "code" 参数(auth 访问令牌,和一个 "state"值。)
这是我的策略
// 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
});
});
这里是回调路由(在回调的配置中指定URL
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('/');
}
}
});
任何方向都会很棒。谢谢!
我认为您需要将 useParamAuth
设置为 true
。 Salesforce 要求 client_secret
和 client_id
作为查询参数,而不是 headers.
您也可以试试这个库 https://www.npmjs.com/package/hapi-salesforce-auth-suite,它包括 signrequest auth 和 oauth。
你好 bell / hapi 开发人员 and/or 专家...预先感谢您的任何建议...我正在尝试为 oauth 完成一个 forcedotcom 策略 (salesforce),它几乎可以工作,我找不到任何关于该错误的文档。
我收到错误消息“[错误:获取自定义访问令牌失败]”
我的应用程序正确重定向到 Salesforce,提示登录 Salesforce 域,进行身份验证,并正确 returns 返回回调 URL,然而,回调 url route/controller,失败,因为 "isAuthenticated" 是假的,但我可以在请求中看到,从 salesforce 返回到回调的 URL 包含一个 "code" 参数(auth 访问令牌,和一个 "state"值。)
这是我的策略
// 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
});
});
这里是回调路由(在回调的配置中指定URL
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('/');
}
}
});
任何方向都会很棒。谢谢!
我认为您需要将 useParamAuth
设置为 true
。 Salesforce 要求 client_secret
和 client_id
作为查询参数,而不是 headers.
您也可以试试这个库 https://www.npmjs.com/package/hapi-salesforce-auth-suite,它包括 signrequest auth 和 oauth。