Подтвердить что ты не робот

Проверка токенов Firebase клиентов на сервере node.js

Я реализую сервер node.js, используя express.js для REST и Firebase для хранения данных.

Я читал Использование NodeJs с Firebase-Security, и его можно было реализовать таким образом, но в моем случае мне нужно отправить данные на сервер, а сервер должен возвращает адрес перенаправления, поэтому использование firebase в качестве канала связи немного сложнее.

В настоящее время я проверяю идентификацию клиентов на сервере, отправив токен Firebase auth в качестве параметра запроса и проверяя авторизацию с помощью метода firebase auth().

dataRef.auth(CLIENT_TOKEN, function(error) {
  if(error) {
    console.log("Login Failed!", error);
  } else {
    console.log("Login Succeeded!");
  }
}); 

Проблема в том, что на сервере мне также нужны привилегии "admin" firebase. Для этого мне нужно снова аутентифицироваться, используя firebase auth(), используя токен администратора. (сгенерированный генератором токенов)

var FirebaseTokenGenerator = require("firebase-token-generator");
var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET);
var token = tokenGenerator.createToken({some: "arbitrary", data: "here"});

Я заметил, что существует ограничение в методе auth():

Обратите внимание, что все ссылки на Firebase имеют одинаковый статус аутентификации. Поэтому, если вы дважды вызываете новую Firebase() и вызываете auth() на одном из них, они оба будут аутентифицированы.

Есть ли способ реализовать это без двойного вызова auth()?

Или есть ли лучшие решения для этого?

4b9b3361

Ответ 1

Основываясь на комментариях и после реализации, представляется лучшим решением использовать универсальную библиотеку JWT, такую ​​как: https://github.com/hokaccha/node-jwt-simple

С помощью библиотеки вы можете декодировать токен с секретом firebase:

// decode
var decoded = jwt.decode(token, secret);
console.log(decoded); //=> {"v":0,"iat":1359943067,"d":{"id":"[email protected],com"}}

Декодированный токен содержит iat (выдается в) и может содержать exp (expires). Если exp не предоставляется, время истечения по умолчанию для токена firebase составляет 24 часа. Вам нужно проверить, истек ли токен.

Подробнее: https://www.firebase.com/docs/security/custom-login.html