Firebase обнаруживает логин пользователя из бэкэнда node.js - PullRequest
0 голосов
/ 09 апреля 2019

Я использую node.js в качестве серверной части для моего веб-приложения. На сервере у меня

  res.sendFile(path.join(__dirname, "../public/html/main/profile.html"));
});

Но я хочу только отправить файл, если пользователь вошел в систему. Я пытаюсь выяснить, как обнаружить это с помощью Firebase в node.js. Я попытался инициализировать приложение в node.js, выполнив

var firebase = require("firebase");
var config = {
  apiKey: "<API_KEY>",
  authDomain: "<PROJECT_ID>.firebaseapp.com",
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
  storageBucket: "<BUCKET>.appspot.com",
};
firebase.initializeApp(config);

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {}
})

Но даже если у меня есть пользователь, вошедший во внешний интерфейс, похоже, что переменная "user" имеет значение false из внутреннего интерфейса. Как определить, зарегистрирован ли пользователь в бэкэнде node.js или нет?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Вы должны передать идентификационный токен на свой сервер.На клиенте вы получите идентификационный токен.

firebase.auth().currentUser.getIdToken()
  .then(function(idToken) {
    // You need to send the ID token to your server.
  })
  .catch(function(error) {
    // Error occurred.
  });

В серверной части вы передадите его и подтвердите идентификационный токен с помощью Firebase Admin SDK:

// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
    // You can return the file now.
  }).catch(function(error) {
    // Handle error
  });
0 голосов
/ 09 апреля 2019

Вы можете создавать сеансы для пользователей и проверять, активен ли сеанс запрашивающего пользователя, прежде чем обслуживать файл.В Express есть удобный модуль для пользовательских сессий, который вы можете хранить на стороне сервера (возможно, в Firebase в вашем случае): https://github.com/expressjs/session Это может выглядеть следующим образом:

if (req.session) {
  // could also have a check for session being valid depending on implementation
  res.sendFile(path.join(__dirname, "../public/html/main/profile.html"));
}

Если вы хотитесохранить сеанс на стороне клиента, используя куки, вы можете обратиться к этому: https://expressjs.com/en/resources/middleware/cookie-session.html

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