前提条件
前回の記事まで終わらせていること。
同じプロジェクトをそのまま使用して改造します。
OAuth認証で取得した情報を読み解く
さて、OAuthで取得したJSONは以下のようになっています。
{
access_token: 'xxxxxxxxxxxxx',
refresh_token: 'yyyyyyyyyyyyyyy',
scope: 'full',
id_token: 'zzzzzzzzzzzzzzzzz',
instance_url: 'https://ap4.salesforce.com',
id: 'https://login.salesforce.com/id/0000000000000/XXXXXXXXXX',
token_type: 'Bearer',
issued_at: '1536900000000'
}
さて、重要な部分をかいつまんで説明します
キー | 説明 |
---|---|
access_token | アクセスするために必要なキー。最重要 |
instance_url | ログインユーザがどのインスタンスにアクセスしているのか |
id | 基本情報を取得するためのURL |
token_type | 認証のタイプ。おそらくBearerになっていると思います。 |
本当はreflesh_tokenも重要ですが、今回は割愛します。
基本情報(ユーザ名)を取得してみよう
ユーザIDやユーザ名といった情報は、"id"で取得したURLをコールすることで取得できます。
というわけで、このURLを使用してデータを取得してみましょう。
route/force.jsのコールバック用メソッドを修正します。
route/force.js
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);
// ここから変更
http.get({
url: payload.id,
headers: {
"Authorization": payload.token_type + " " + payload.access_token
}
}, (error, response, body) => {
// BodyをJSONパース
var obj = JSON.parse(body);
res.render('force', {
username: obj.display_name, //ユーザ名
payload: body //本文
});
});
// ここまで変更
});
});
ポイントは、ヘッダ情報に以下のように情報を加えることです。
"Authorization": payload.token_type + " " + payload.access_token
次に、force.pugを修正します。
views/force.pug
extends layout
block content
h1 Payload
p こんにちは、#{username} さん
p #{payload}
さて、ここまで変更したら、改めて http://localhost:3000/force にアクセスします。
ログインしたユーザの名前は表示されましたでしょうか。
ユーザ名が表示されればデータの取得は成功です。
また、ここで取得した情報を紐解くことで、各種データを取得することができます。
実際にコールできるAPIや取得できる情報は、公式サイトであるREST API 開発者ガイドを参考にしてみてください。