2016-12-21 3 views
1

У меня есть вопрос, на который я не верю, был дан ответ раньше. В настоящее время я ищу что-то в Firebase, подобное сеансу PHP.Как перенаправить, если пользователь не зарегистрирован в Firebase

Вы видите, когда я выхожу из своего веб-приложения, пользователь перенаправляется обратно на страницу входа, как и должно быть. Тем не менее, они все еще могут вводить прямые URL-адреса, такие как home.html, и обходить экран входа.

Мне интересно, как это может произойти, если onAuthStateChanged вызывается, когда страница загружается. Было бы разумно немедленно перенаправить их, подобно сеансу. К сожалению, это не так.

Это код, который login.html и dashboard.html звоните, когда они загружены. Может ли кто-нибудь обнаружить ошибку, которая может вызвать эту проблему? Благодаря!

App.js

(function(){ 
const config ={ 
apiKey: " :) ", 
authDomain: " :)", 
databaseURL: " :) ", 
storageBucket: " :)", 
messagingSenderId: ":)" 
}; 
firebase.initializeApp(config); 
    //Grab Login Elements 
const loginBtn = document.getElementById('sign-in-btn'); 
const emailTxt = document.getElementById('user-email'); 
const passTxt = document.getElementById('user-password'); 


//Set the click event to sign the user in 
loginBtn.addEventListener('click', e => { 
const email = emailTxt.value; 
const password = passTxt.value; 
const auth = firebase.auth(); 
//Actually Sign In 
const promise = auth.signInWithEmailAndPassword(email, password); 
promise.catch(e=> console.log(e.message)); 
}); 
//Realtime Authstate Listener 

firebase.auth().onAuthStateChanged(firebaseUser => { 
    if(firebaseUser){ 
     window.location = 'dashboard.html' 
    }else{ 
     window.location = 'login.html' 
    } 
}); 
}()); 

Вот важные части dashboard.html

<!DOCTYPE html> 
<html> 
<head> 
<title>My App</title> 
<link rel="stylesheet" type="text/css" href="styles/dashboardstyle.css"> 
<script src="https://www.gstatic.com/firebasejs/3.6.4/firebase.js"></script> 
<body> 
<script type="text/javascript" src="scripts/app.js"></script> 
<script type="text/javascript" src="scripts/dashboard.js"></script> 
</body> 
</html> 

Это будет иметь смысл для onAuthStateChanged огня, понимают, что пользователь не вошел в систему, и перенаправлять , правильно? Есть идеи? Спасибо всем!

ответ

1

Я решил эту проблему, создав вложенный if statement в пределах части оригинала. В этом новом заявлении if я проверил местоположение пользователя и, если они были на странице входа, они были перенаправлены с использованием существующего кода. У меня также были else if предложения здесь, чтобы проверить другие местоположения пользователя. Например, если они были на странице с именем profile.html, и пользователь существует, тогда мне не пришлось бы перенаправлять их. Это было проверено с помощью кода

else if(window.location.href == 'http://website.com/profile.html`){ 
/*then do nothing, no need to be redirected because the user exists, as they 
are within a permitted page */ 
    } 

Это решило мою проблему.

0

Это очень хороший вопрос. Это зависит от того, как настроена ваша инфраструктура.

Если вы используете базу данных Firebase в режиме реального времени, вы можете использовать firebase правило, чтобы ограничить доступ к ресурсам и использовать onAuthStateChanged слушатель на каждой странице и перенаправлять, чтобы войти в когда пользователь не авторизован.

Если вы используете свой собственный бэкэнд, при входе вы сохраните свой собственный файл cookie сеанса. Самое простое - сохранить маркер id firebase (getToken). Вам нужно будет постоянно обновлять его каждый час (getToken (true)), поскольку токен истекает каждый час и обновляет cookie сеанса. В своем бэкэнде вы можете использовать библиотеку admin node.js, чтобы проверить токен идентификатора перед тем, как обслуживать ограниченный ресурс, и перенаправить на страницу входа в систему, если пользователь не вошел в систему. Я понимаю, что это как-то упрощение проблемы, но должно направляйте вас в правильном направлении. Команда Firebase была уведомлена об этой проблеме и изучает ее.

Смежные вопросы