Страница входа в Salesforce для OAuth недоступна с использованием NodeJS - PullRequest
1 голос
/ 08 марта 2020

Я пытаюсь войти в Salesforce из Google Assistant (используя диалоговое окно), используя OAuth. Все, что я говорю Google Assistant, должно быть выполнено (сопоставлено с намерением, которое затем сопоставляется с кодом, который выполняет намерение пользователя. Таким образом, в основном код выполнения находится на сервере (node js express), размещенном на хосте. на Heroku.

Проблема в том, что когда я начинаю говорить «Поговори с тестовым приложением», я ожидаю появления страницы входа в систему Salesforce (где я буду вводить кредиты, а затем - часть согласия), но эта страница никогда не приходит. Я уверен, что может быть что-то не хватает в моей конфигурации ссылки / кода учетной записи, но я не могу этого понять.

const express = require('express');
const bodyParser = require('body-parser');
const jsforce = require('jsforce');
const { dialogflow } = require('actions-on-google');
const {
  SimpleResponse,
  BasicCard,
  Image,
  Suggestions,
  Button
 } = require('actions-on-google');

 var options;
 var port = process.env.PORT || 3000;

 const expApp = express().use(bodyParser.json());

 //app instance
 const app = dialogflow({
   debug: true
 });

 app.intent('Default Welcome Intent', (conv) => {

 expApp.get('/oauth2/auth', function(req, res) {
  const oauth2 = new jsforce.OAuth2({
  clientId: process.env.SALESFORCE_CONSUMER_KEY,
  clientSecret: process.env.SALESFORCE_CONSUMER_SECRET,
  redirectUri: process.env.REDIRECT_URI
 });
  res.redirect(oauth2.getAuthorizationUrl({}));
});

//
// Pass received authorization code and get access token
//
expApp.get('/getAccessToken', function(req,res) {
   const oauth2 = new jsforce.OAuth2({
   clientId: process.env.SALESFORCE_CONSUMER_KEY,
   clientSecret: process.env.SALESFORCE_CONSUMER_SECRET,
   redirectUri: process.env.REDIRECT_URI
});

const conn = new jsforce.Connection({ oauth2 : oauth2 });
conn.authorize(req.query.code, function(err, userInfo) {
    if (err) {
      return console.error(err);
    }
    const conn2 = new jsforce.Connection({
      instanceUrl : conn.instanceUrl,
      accessToken : conn.accessToken
    });
    conn2.identity(function(err, res) {
      if (err) { return console.error(err); }
      console.log("user ID: " + res.user_id);
      console.log("organization ID: " + res.organization_id);
      console.log("username: " + res.username);
      console.log("display name: " + res.display_name);
      options = { Authorization: 'Bearer '+conn.accessToken};
      });
   });
  });

conv.ask(new SimpleResponse({
  speech:'Hi, how is it going? You are being guided to the login page',
   text:'Hi, how is it going? You are being guided to the login page',
  }));
});

expApp.get('/', function (req, res) {
  res.send('Hello World!');
});

expApp.listen(port, function () {
  expApp.post('/fulfillment', app);
  console.log('Example app listening on port !');
});

Account Linking Settings on Google Actions

1 Ответ

1 голос
/ 08 марта 2020

Управление OAuth с помощью Google Assistant осуществляется из проекта Actions on Google, который вы создаете для своего помощника. В этих настройках вы определяете, какой токен и URL-адрес OAuth должны использоваться для входа в приложение. Если вы хотите, чтобы пользователи выполняли вход через приложение-помощник, вам нужно будет выбрать вариант входа OAuth .

Так что вам не нужно использовать свой собственный код для получить страницу OAuth, вы можете просто использовать ответ SignIn () , данный вам в Действиях в Google SDK. Это запустит поток привязки аккаунта для Google Assistant.

app.intent('Start Signin', (conv) => {
  conv.ask(new SignIn('To get your account details'));
});

app.intent('ask_for_sign_in_confirmation', (conv, params, signin) => {
  if (signin.status !== 'OK') {
    return conv.ask('You need to sign in before using the app.');
  }
  // const access = conv.user.access.token;
  // possibly do something with access token
  return conv.ask('Great! Thanks for signing in.');
});
...