Я пытаюсь сделать простую аутентификацию для моего проекта.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, но я был бы признателен за любые идеи, предложения или изменения в архитектуре.Спасибо!