質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

2回答

305閲覧

verifier.verify関数を同期的に呼び出したい

kaz-kd

総合スコア7

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2018/05/01 11:10

前提・実現したいこと

https://www.npmjs.com/package/idtoken-verifier
にある
verifier.verify関数を同期的に呼び出した後にerror, payloadの値を取得したいです。

試したこと

Promiseやasync/awaitについては調べてみたのですが、うまく適用できませんでした。

補足情報(FW/ツールのバージョンなど)

node.jsはv8.11.1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Hayato様さっそくの回答ありがごうとざいます。
JavaScriptに慣れておらず初歩的な質問をしてしまい申し訳ありません。

下記「util.promisify()でcallbackスタイルの関数をpromise化」を参考にしコーディンしてみました。
https://qiita.com/t-okushima/items/fbca67541003576997cc

javascript

1var IdTokenVerifier = require('idtoken-verifier'); 2const { promisify } = require('util'); 3const verify = promisify(verifier.verify); 4 5async function checkIDToken(req, res) { 6 var idtoken = 'xxxxxxxxx'; 7 var nonce = 'yyyyyyyyyy'; 8 var rtn = await verify(idtoken, nonce); 9 console.log(rtn); 10 return rtn; 11} 12 13checkIDToken(req, res) ;

結果

verifier.verify関数の中でdecode関数を呼び出しており、そこでエラーが発生しているようです。

エラーメッセージ

(node:6496) UnhandledPromiseRejectionWarning: TypeError: this.decode is not a function
at IdTokenVerifier.verify (C:\proj\challenge\ws\backend_app\node_modules\idtoken-verifier\src\index.js:69:18)
at internal/util.js:230:26
at checkIDToken (C:\proj\challenge\ws\backend_app\app.js:149:22)

投稿2018/05/02 01:50

kaz-kd

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HayatoKamono

2018/05/02 02:04

const verify = promisify(verifier.verify); ではなく、 verifier.verify = promisify(verifier.verify); で、いけませんか?
HayatoKamono

2018/05/02 02:05 編集

ちなみに、kaz-kdさんのこちらの投稿ですが、私の回答に対するコメントとしてではなく、ご自身の質問に対する回答として、投稿してしまったようですね。
HayatoKamono

2018/05/02 03:37 編集

トークンがデタラメな為か検証エラーにはなりますが、これでとりあえず動くかと。 (※動作確認の取れたコードを掲載していましたが、あえて削除することにしました) とりあえず、先のコメント通りにすれば今回の質問は解決になるので、他のところでエラーが出る場合はご自身で対応なさって下さい。
guest

0

ベストアンサー

verifier.verify関数を同期的に呼び出した後にerror, payloadの値を取得したいです。

idtoken-verifierは同期的に呼び出せるメソッドを提供しているのですか?その場合は、そちらを使いましょう。

そうでない場合は、同期的には呼び出せないので、非同期処理を同期的処理っぽく書きたいという趣旨の質問と解釈して回答致します。

Promiseやasync/awaitについては調べてみたのですが、うまく適用できませんでした。

idtoken-verifierPromiseに対応していないようなので、util.promisify()を使ってPromiseが使えるようにしてみて下さい。そうすれば、async/awaitを用いて、非同期処理を同期処理っぽく書くことが出来るようになります。

参考

util.promisify()

その他参考

質問をする際は、以下の「質問するときのヒント」を参考にされると、より回答がつきやすくなったり、より適切な回答が得られやすくなると思います。
https://teratail.com/help/question-tips

投稿2018/05/01 11:23

編集2018/05/01 11:45
HayatoKamono

総合スコア2415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問