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でなんかやろうとすると必ずハマる!必ずだ!
もームカついてきた。切れそう!
寝る😬
この記事が気に入ったらサポートをしてみませんか?