これまで、MongodbとExpressを使用していました。そこで、req.user
オブジェクトをチェックすることで認証全体が行われました。私が見たところ、Firebase認証は主にフロントエンドで行われます。 req.user
をバックエンドのFirebaseで動作させるにはどうすればよいですか? tutorials をいくつか見ましたが、いくつかの方法を示して続行しました。ロジックについてもっと質問するつもりですが、いくつかのコード例がおそらく役立つでしょう。
Firebase認証は主にフロントエンドで行われます
正しい。 Firebaseから提供されたSDKを使用する場合、ユーザー認証は完全にクライアント側で行われます。
ただし、LDAP/ADやその他のエンタープライズシェナニガンとの統合など、特別な認証を行う必要がある場合は、クライアント側のSDKが認証に使用する カスタムトークンの作成 を行う必要があります。ユーザー。
どうすれば入手することができますか
req.user
バックエンドでFirebaseを使用するには?
これはあなたが自分で実装する必要があるものです。クライアント側のフローは次のようになります。
localstorage
に設定します。 Authentication State Persistence を参照してくださいlocalstorage
からトークンを取得し、APIリクエストとともに送信する必要があります。リクエストヘッダーにトークンを添付するとします:FIREBASE_AUTH_TOKEN: abc
。 Firebaseはローカルストレージに保存されているユーザーデータをfirebase:authUser: として取得しますを参照してください
したがって、サーバー側では、 Firebase Admin SDK を使用して、そのトークンを取得し、 verifyIdToken
を介して検証します。以下のミドルウェアの簡単な汚い例:
const {auth} = require('firebase-admin');
const authService = auth();
exports.requiresAuth = async (req, res, next) => {
const idToken = req.header('FIREBASE_AUTH_TOKEN');
// https://firebase.google.com/docs/reference/admin/node/admin.auth.DecodedIdToken
let decodedIdToken;
try {
decodedIdToken = await authService.verifyIdToken(idToken);
} catch (error) {
next(error);
return;
}
req.user = decodedIdToken;
next();
}
次に、このミドルウェアを次のように使用します。
const express = require('express');
const router = express.Router();
const {requiresLogin} = require('./my-middleware.js');
router.get('/example', requiresLogin, async (req, res) => {
console.log(req.user)
})
これがあなたに何をすべきかについての考えを与えることを願っています。私はしばらくFirebaseを使用していません。上記の情報は、ドキュメントを見て収集したものです。
サーバー側のセッションのみを計画している場合は、FirebaseセッションCookieの使用を検討する必要があります: https://firebase.google.com/docs/auth/admin/manage-sessions 。
httpOnly
Cookieの使用方法を示す例は次の場所にあります: https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions