web-dev-qa-db-ja.com

NodeJSを使用したFirebase認証

これまで、MongodbとExpressを使用していました。そこで、req.userオブジェクトをチェックすることで認証全体が行われました。私が見たところ、Firebase認証は主にフロントエンドで行われます。 req.userをバックエンドのFirebaseで動作させるにはどうすればよいですか? tutorials をいくつか見ましたが、いくつかの方法を示して続行しました。ロジックについてもっと質問するつもりですが、いくつかのコード例がおそらく役立つでしょう。

4
Alex Ironside

Firebase認証は主にフロントエンドで行われます

正しい。 Firebaseから提供されたSDKを使用する場合、ユーザー認証は完全にクライアント側で行われます。

ただし、LDAP/ADやその他のエンタープライズシェナニガンとの統合など、特別な認証を行う必要がある場合は、クライアント側のSDKが認証に使用する カスタムトークンの作成 を行う必要があります。ユーザー。

どうすれば入手することができますか req.userバックエンドでFirebaseを使用するには?

これはあなたが自分で実装する必要があるものです。クライアント側のフローは次のようになります。

  1. ユーザーはクライアント側で認証を実行します。
  2. ユーザーがExpressAPIにアクセスしようとすると、localstorageからトークンを取得し、APIリクエストとともに送信する必要があります。

リクエストヘッダーにトークンを添付するとします:FIREBASE_AUTH_TOKEN: abcFirebaseはローカルストレージに保存されているユーザーデータを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を使用していません。上記の情報は、ドキュメントを見て収集したものです。

16
Francisco Mateo

サーバー側のセッションのみを計画している場合は、FirebaseセッションCookieの使用を検討する必要があります: https://firebase.google.com/docs/auth/admin/manage-sessions

httpOnly Cookieの使用方法を示す例は次の場所にあります: https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions

0
bojeil