node.jsを利用したクローラー作成(38)

✅firebaseでのcustom claimを利用したユーザーロールの実装
❌crawlingデータ表示サイトでの無限ページング処理
↑ajaxエンドポイント作った。データ取れた。描画まだ。

寝不足だったり、うまくいかなかったりで散々な日。
テンプレートエンジンのpugでスクリプトのロードタイミング問題でものすごくハマる。ハマるのはもう嫌じゃ…🐺

firebase ユーザーロールぼんやりと調べた結果

調べたけど知識不足感はんぱない…😫

そもそもロールとは
いわゆる管理者用ログインとか、サポーター特権とか。
役割ごとに出来ることが異なる機能(いわゆる認可)を持たせる。
ロールを持つ認証をロールベース認証とか言うらしい。

FirebaseAuthはサインイン認証のみで、認可まではやってくれない。

Firebase Authenticationはユーザ認証の機能を提供しています。
ご要望のようなユーザ種別による制御(つまり、認可)はFirebase Authentication単独では実現できません。
私はCloud Firestoreにユーザ情報(プロフィールやユーザ種別など)を持たせて、アプリ側で制御します。

よくあるロールベース認証の実装は、ユーザーのアクセス時に何らかのuidを取り出し、DB上のロール情報とuidとを照合し、認可を行うという方法。

firebaseでは、認可した情報をuidとセットで持たせることが出来る。
これをcustom claimという(と思う)。

Custom Claim

簡単なhttp実装これ。

日本語情報では以下のサイトが分かりやすかった。

文面で色々読んだところで、結局custom claim is 何?状態。

実装して値を眺めてようやく分かった。
firebase-admin SDKを使うと、ユーザーのidtoken取れる。
custom claimをセットすると、idtoken取った時に付加情報としてrole等も取れるよ!ってだけの話だった。

処理抜粋
firebaseuiなどでユーザー認証後のコールバックで、
バックエンドAPIにpostしてサーバー側でcustom claimを設定。

async function setClaims(uid,role){
    return await admin.auth().setCustomUserClaims(uid,{
    admin:true,
    user:false}); // 見づらいのでrole適用は省略
}

あとは通常のルーティング処理内で、ロールの確認が必要な時にdecodedTokenからrole情報をいつでも取り出せる。

admin.auth().verifyIdToken(idToken)
.then(decodedToken=>{
    const uid = decodedToken.uid; //user id
    const admin = decodedToken.admin; // custom claim : admin : boolean
    const user = decodedToken.user; // custom claim : user : boolean
});

custom claimのメリットとしては、DBに保存してあるuserのrole設定に何度も問い合わせ無くて済むこと…だと思う。(自信なし)
また、token自体に期限が付いているので、ある程度のセキュリティが担保されている。…と思う。

Pugで外部javascriptファイルでdom操作

表題の件がうまくいかずに相当ハマった。
とにかくdom操作する場合は、dom要素読み込み終わってからやれとのこと。読み込むjavascriptファイルにて、以下のイベントを基本に処理を書くと良い。

document.addEventListener("DOMContentLoaded", function (event) {
 console.log('call');
 //god code
});

Pugでなんかやろうとすると必ずハマる!必ずだ!
もームカついてきた。切れそう!
寝る😬

この記事が気に入ったらサポートをしてみませんか?