Firebase аутентификация с использованием NodeJS - PullRequest
0 голосов
/ 16 мая 2018

До сих пор я работал с Mongodb и Express.Там вся моя аутентификация была сделана путем проверки req.user объекта.Из того, что я видел, аутентификация Firebase в основном выполняется во внешнем интерфейсе.Как мне заставить req.user работать с Firebase в бэкэнде?Я видел пару учебников , но они просто показали пару методов и продолжили.Я хочу спросить больше о логике, но некоторые примеры кода, вероятно, помогут.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Если вы планируете проводить только сеансы на стороне сервера, вам следует рассмотреть возможность использования файлов cookie сеанса Firebase: https://firebase.google.com/docs/auth/admin/manage-sessions.

Пример, показывающий, как использовать httpOnly куки, доступен по адресу: https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions

0 голосов
/ 16 мая 2018

Аутентификация Firebase в основном выполняется во внешнем интерфейсе

Правильно.Аутентификация пользователя полностью выполняется на стороне клиента при использовании предоставленных SDK от Firebase.

Однако, если вам нужно выполнить какую-то специальную аутентификацию, такую ​​как интеграция с LDAP / AD или некоторыми другими корпоративными махинациями, вам потребуется создать пользовательский токен , которые клиентские SDK будут использовать для аутентификации пользователя.

Как мне заставить req.user работать с Firebase в бэкэнде?

Это то, что вам понадобится реализовать самостоятельно.Поток на стороне клиента будет выглядеть примерно так:

  1. Пользователь выполняет аутентификацию на стороне клиента.
  2. Когда пользователь пытается получить доступ к вашему Express API, вам нужно будет получить токен из 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, и информацию, приведенную выше, я получил, просмотрев документацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...