Один пользователь входит в систему на всех устройствах

#node.js #heroku #firebase-authentication

#node.js #heroku #firebase-аутентификация

Вопрос:

Я создавал проект на node.js недавно я столкнулся с этой ошибкой аутентификации пользователя. Проблема в том, что после входа в систему с одной учетной записи, если одновременно я обновляю домашнюю страницу веб-сайта с другого устройства, она перенаправляется на панель управления первой учетной записи пользователя. Другими словами, один пользователь входит в систему на всех устройствах по сети. Если предположить, что я не обновляю страницу, и я нормально вхожу в приложение, оно работает нормально. Эта проблема возникает как на локальном хостинге, так и после его размещения на Heroku. Используемые технологии — node.js для обработки внутренних представлений и URL-адресов. HTML, CSS, JavaScript для интерфейса. Firebase для базы данных и аутентификации. Вот код для входа в систему-

 const express = require("express");
const path = require("path");

//Create Router Object.
const router = express.Router();

//Main Login Page (GET)
router.get("/", (request, response) => {
    response.sendFile(path.resolve("./views/html/login.html"));
});

//Main Login Page (POST)
router.post("/", (request, response) => {
    let email = request.body.email;
    let password = request.body.password;
    firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE);
    firebase.auth().signInWithEmailAndPassword(email, password)
        .then(r => {
            let user = firebase.auth().currentUser;
            if (user.emailVerified)
                response.redirect('/dashboard');
            else
                response.send("<h1>Please Verify your email address.</h1>");
        })
        .catch(error => {
            console.log(error);
            response.send("<h1>Invalid Credentials</h1>");
        });
});
  

Пожалуйста, кто-нибудь может мне помочь устранить эту ошибку в моем проекте?

Ответ №1:

Вызов firebase.auth().signInWithEmailAndPassword(email, password) указывает пользователю местоположение, где бы вы ни вызывали этот код. Поскольку вы запускаете это в express.js приложение в Node.js , пользователь входит в систему, чтобы Node.js обрабатывайте их до тех пор, пока вы не выпишете их снова. Вот почему используемый вами Firebase Authentication SDK предназначен только для использования в клиентских приложениях, где это поведение работает должным образом.

При интеграции аутентификации Firebase в процесс на стороне сервера следует использовать Firebase Admin SDK. Этот Admin SDK не имеет понятия о текущем зарегистрированном пользователе и нет signInWithEmailAndPassword . Вместо этого, если вам нужно знать личность пользователя, обращающегося к коду на стороне сервера, вы:

  1. Войдите в систему пользователя в своем клиентском приложении с помощью Firebase Authentication SDK.
  2. Получите идентификационный токен для этого пользователя на клиенте и передайте его вместе с вашим вызовом на сервер.
  3. На сервере проверьте этот идентификационный токен, чтобы убедиться, что пользователь является тем, за кого он себя выдает.
  4. Затем используйте информацию о личности пользователя, чтобы определить, авторизован ли он для доступа к информации.

Подробнее об этом см. Документацию Firebase по проверке токенов ID.