Статьи

Создание веб-приложения с нуля с использованием AngularJS и Firebase: часть 8

В предыдущей части этого руководства мы добавили индикатор загрузки Ladda в наше приложение, чтобы сделать его более интерактивным. Мы также увидели, как фильтровать результаты данных при извлечении данных из firebase. В этой части руководства мы добавим функцию выхода из системы и исправим несколько проблем.

Давайте начнем с клонирования предыдущей части руководства от GitHub .

1
git clone https://github.com/jay3dec/AngularJS_Firebase_Part7.git

После клонирования исходного кода перейдите в каталог проекта и установите необходимые зависимости.

1
2
cd AngularJS_Firebase_Part7
npm install

Как только зависимости установлены, запустите сервер.

1
npm start

Укажите в браузере http: // localhost: 8000 / app / # / home, и приложение должно быть запущено.

Мы начнем с добавления кнопки выхода в представления addPost.html и addPost.html . Откройте обе страницы и добавьте новый тег привязки к элементу nav.

1
2
3
4
5
<nav class=»blog-nav»>
     <a class=»blog-nav-item » href=»#/welcome»>Home</a>
     <a class=»blog-nav-item active» href=»#/addPost»>Add Post</a>
     <a class=»blog-nav-item » style=»cursor:pointer;»
</nav>

Когда мы хотим выйти из системы конкретного пользователя, мы можем вызвать API $unauth . Мы создадим метод в нашем CommonProp AngularJS, чтобы он был доступен для всех контроллеров. Откройте home.js и измените сервис CommonProp в него новую функцию logoutUser .

1
2
3
logoutUser:function(){
    // logout the user
}

Теперь внутри функции logoutUser используйте loginObj чтобы выполнить $unauth API $unauth и перенаправить на домашнюю страницу. Вот модифицированный сервис CommonProp .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
.service(‘CommonProp’,[‘$location’,’$firebaseAuth’,function($location,$firebaseAuth) {
    var user = »;
    var firebaseObj = new Firebase(«https://blistering-heat-2473.firebaseio.com»);
    var loginObj = $firebaseAuth(firebaseObj);
  
    return {
        getUser: function() {
            return user;
        },
        setUser: function(value) {
            user = value;
        },
        logoutUser:function(){
            loginObj.$unauth();
            console.log(‘done logout’);
            $location.path(‘/home’);
        }
    };
}])

В AddPostCtrl и WelcomeCtrl добавьте функцию с именем logout которая вызовет выход из службы CommonProp .

1
2
3
$scope.logout = function(){
    CommonProp.logoutUser();
}

Сохраните вышеуказанные изменения и войдите в систему, используя действующий адрес электронной почты и пароль. После входа в систему вы сможете увидеть ссылку « Выход из системы» в верхнем меню. Нажав на ссылку Выход из системы, вы выйдете из приложения.

Ссылка на выход добавлена ​​в меню

До сих пор все выглядит хорошо и работает хорошо. Но после того, как вы вошли в приложение, при попытке обновить страницу все испортилось. Итак, нам нужно найти способ сохранить данные страницы. Мы будем использовать локальное хранилище HTML 5 для поддержки важных данных.

Как только пользователь успешно вошел в систему, мы сохраним адрес электронной почты в локальном хранилище. Измените функцию CommonProp службе CommonProp чтобы сохранить адрес электронной почты пользователя в локальном хранилище.

1
2
3
4
setUser: function(value) {
    localStorage.setItem(«userEmail», value);
    user = value;
}

Теперь, получая адрес электронной почты пользователя из службы CommonProp , он CommonProp адрес электронной почты из локального хранилища и вернет его.

1
2
3
4
5
6
getUser: function() {
    if(user == »){
        user = localStorage.getItem(‘userEmail’);
    }
    return user;
}

Также обязательно удалите данные локального хранилища и пользовательскую переменную из службы CommonProp когда пользователь выходит из системы.

1
2
3
4
5
6
logoutUser:function(){
    loginObj.$unauth();
    user=»;
    localStorage.removeItem(‘userEmail’);
    $location.path(‘/home’);
}

Сохраните вышеуказанные изменения и войдите в систему, используя действующий адрес электронной почты и пароль. После входа попробуйте обновить страницу, и страница должна работать как положено.

Прямо сейчас пользователи могут получить доступ ко всем страницам, независимо от того, вошли они в систему или нет. Чтобы предотвратить несанкционированный доступ, мы проверим сеанс пользователя.

В контроллере WelcomeCtrl добавьте следующий код, чтобы получить текущего вошедшего в систему пользователя. Если пользователь не существует, перенаправьте его на домашнюю страницу.

1
2
3
4
5
$scope.username = CommonProp.getUser();
 
if(!$scope.username){
    $location.path(‘/home’);
}

Аналогичным образом добавьте следующую проверку кода в контроллер AddPostCtrl .

1
2
3
if(!CommonProp.getUser()){
    $location.path(‘/home’);
}

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

Мы добавим еще одну функцию для автоматического входа пользователя на странице входа. Мы будем использовать API $onAuth который будет прослушивать изменения в состоянии аутентификации. Когда пользователь загружает страницу входа и состояние проверки подлинности происходит из-за допустимого сеанса, $onAuth . Добавьте $onAuth API $onAuth в контроллер HomeCtrl .

1
2
3
4
5
loginObj.$onAuth(function(authData) {
  
 //fire when authentication state occurs
  
});

Если authData не является нулевым в возвращенном обратном вызове, то это допустимый сеанс. Итак, добавьте код, чтобы сохранить данные пользователя в сервисе CommonProp и перенаправить на страницу приветствия.

1
2
3
4
5
6
loginObj.$onAuth(function(authData) {
   if(authData){
       CommonProp.setUser(authData.password.email);
       $location.path(‘/welcome’);
   }
});

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

В этой части серии мы реализовали функцию выхода из системы, а также решили некоторые проблемы, такие как предотвращение несанкционированного доступа пользователей и сохранение данных при обновлении страницы.

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

Следите за предстоящим уроком, проверив мою страницу инструктора . Он включает в себя все учебные пособия, как только они опубликованы.

Дайте нам знать ваши мысли, предложения и исправления в комментариях ниже. Исходный код из этого урока доступен на GitHub .