Серверный Node.js / экспресс-авторизация на основе токена от клиентской аутентификации Firebase - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сделать простую аутентификацию для моего проекта.Clientside Firebase Authetication (Google) работает отлично, но как мне ограничить доступ пользователей на стороне сервера к определенным маршрутам?

У меня нет проблем с передачей токена аутентификации на сервер с помощью простого запроса http:

firebase.auth().currentUser.getIdToken(true)
.then((idToken) => {
            // Send token to your backend via HTTPS
            $.ajax({
                type: 'POST',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('Authorization', idToken);
                },
                url: '/token'
            });
          });

Но проблема в том, что это всего лишь своего рода вызов API, который никуда не перенаправляет.Я не могу просто перейти на любой другой путь со стороны клиента, передав токен вместе с открытием новой ссылки.(Или я могу?)

На стороне сервера я легко ловлю токен по пути '/ token':

app.post('/token', (req, res) => {  
      idToken = res.req.headers.authorization;
      res.status(200).send('OK');

      admin.auth().verifyIdToken(idToken)
      .then((user) => {
        console.log(user.email);
        console.log(user.uid);
        console.log(user.name);
      });
    });

, но на стороне сервера я не могу сопоставить токен с любым вызовомна любую другую страницу.Что я могу сделать, чтобы я мог добавить некоторые проверки, чтобы иметь возможность отображать страницу на основе пользовательских данных.Или не обслуживать все это.Примерно так:

 app.get("/dashboard", function (req, res) {
     if (user.isAlowedToAccessDashboard) {
       var userSpecificData = user.someData;
       res.render(activeMenu, {userSpecificData});
     } else {
       console.log('Access denied');
     }
 });

Было бы замечательно остаться на Express / EJS / FirebaseAuth, но я был бы признателен за любые идеи, предложения или изменения в архитектуре.Спасибо!

...