JavaScript
Express
Salesforce
nodejs

ExpresssでSalesforceと連携するWebアプリをサクッと作成する その1 OAuth認証編

前提条件

Node.jsのインストールは済んでいるものとします。

また、以下の設定でSalesforceの接続アプリケーションを作成済みとします。

設定名 内容
コールバックURL http://localhost:3000/force/oauth/callback
OAuth 範囲 フルアクセス

※実運用する際には使用用途に限って接続アプリケーションを設定します。
今回の記事で最低限必要になるのは
「ユーザに代わっていつでも要求を実行が最低限必要」です。

準備

まずはexpress をインストール。

% npm install -g express-generator

プロジェクトの作成

今回は「express-force」というプロジェクトを作成します。

% express --view=pug express-force
% cd express-force
% npm install

Salesforceへ繋ぐ準備をする

salesforce-oauth2というパッケージを使用してOAuthの準備をします。

% npm install --save salesforce-oauth2

次に、routes/force.jsを作成します。

routes/force.js
var express = require('express');
var oauth2 = require('salesforce-oauth2');

var router = express.Router();

let callbackUrl = "http://localhost:3000/oauth/callback",
    consumerKey = "コンシューマ鍵",
    consumerSecret = "コンシューマ秘密鍵";

/* GET home page. */
router.get('/', (req, res, next) => {
    //res.render('index', { title: 'Express' });

    var uri = oauth2.getAuthorizationUrl({
        redirect_uri: callbackUrl,
        client_id: consumerKey,
        scope: 'api', // 'id api web refresh_token'
        // You can change loginUrl to connect to sandbox or prerelease env.
        //base_url: 'https://test.my.salesforce.com'
    });
    return res.redirect(uri);
});

router.get('/oauth/callback', (req, res, next) => {
    var authorizationCode = req.param('code');

    oauth2.authenticate({
        redirect_uri: callbackUrl,
        client_id: consumerKey,
        client_secret: consumerSecret,
        code: authorizationCode,
    }, function(error, payload) {

        // 内容を表示する
        console.log(payload);

        res.render('force', {payload: JSON.stringify(payload)});
    });
});

module.exports = router;

最後に、Payloadの情報を表示するためのページを用意します。

views/force.pug
extends layout

block content
  h1 Payload
  p #{payload}

最後に、app.jsを編集します。

app.js
// ~~前略~~

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var forceRouter = require('./routes/force'); // この行を追加

var app = express();

// ~~ 略 ~~

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/force', forceRouter); // この行を追加

それでは、起動します。

npm start

ブラウザを開き、 http://localhost:3000/force にアクセスします。

すると、以下のように聞かれますので、「許可」を選択します。

force_auth.png

承認後、以下のようにアクセストークンを含むPayloadが表示されればログイン成功です。

payload.png

次回は、このアクセストークンを使用したSalesforce情報の取得を行います。