
Firebase Authorizationを使って開発している時に、idTokenを取得したいと思う時がありました。 普通はFirebase SDKでログインすればidTokenは取得できますが、例えばCIや単体テストなどでわざわざ手動でログインしてidTokenを取得するのはめんどくさいものがあります。
調査したところ、ややわかりにくいですが、実現方法はFirebaseのマニュアルのページに載っていました。
マニュアルに載っている下記の3つの手順
を実行するとidTokenを取得することができます。
(1) 「Firebase Admin SDK を使用したカスタム トークンの作成」
Promiseを使ってサンプルを書き直していますが、下記のような感じでカスタムトークンを取得します。
このカスタムトークンを使ってFirebase Authorizationにアクセスできれば良いのですが、このトークンではアクセスできなかったです。
getCustomToken(userId, additionalClaims) {
return new Promise((resolve, reject) =>
admin.auth().createCustomToken(userId, additionalClaims)
.then(function (customToken) {
resolve(customToken);
return;
})
.catch(function (error) {
reject(null);
return;
})
);
}
(2) クライアントでのカスタム トークンを使用したログイン
(1)で取得したカスタムトークンでFirebaseにログインします。
ここもPromiseを使ってサンプルを書き直しています。
executeAuthorization(customToken) {
return new Promise((resolve, reject) =>
firebase.auth().signInWithCustomToken(customToken)
.then(function () {
resolve(true);
return;
}).catch(function (error) {
reject(false);
return;
})
);
}
(3) idTokenを取得する。
(2)でログインしたのでカスタムトークンを取得できます。
ここもPromiseを使ってサンプルを書き直しています。
getIdToken() {
return new Promise((resolve, reject) =>
firebase.auth().currentUser.getIdToken(true).then((idToken) => {
resolve(idToken);
}).catch((error) => {
reject(null);
})
);
}
最後に
上記以外にもFirebase SDKやFirebase Admin SDKの設定があるため、サンプルコードを確認してください。
NPMのパッケージとしても公開したので、Node.jsを利用されている方は利用するとCIや単体テストなどで認証を通さないといけない場合に、楽になるのではないかと思います。