Статьи

Начните строить свой блог с Parse.js: логин пользователя

Конечный продукт
Что вы будете создавать

На последнем занятии вы узнали, как добавлять данные на Parse.com и отображать их на своем веб-сайте. Вы познакомились с концепцией объектов, коллекций и представлений и создали свой первый класс. Начиная с этого сеанса и далее, вы будете создавать панель администратора системы блогов.

И все это начинается с создания класса User и включения входа в систему.

Parse.com сделал чрезвычайно простым добавление нового класса User. Просто нажмите « Добавить класс » и выберите « Пользователь », чтобы создать его.

Добавить класс пользователя

Добавьте новую строку для себя:

Добавить нового пользователя

Теперь, когда у вас есть пользователь, мы можем сделать приложение более безопасным, установив некоторые права доступа на уровне класса .

Перейдите к своей таблице для сообщений в блоге и нажмите « Безопасность »:

Безопасность блога

Измените разрешение «Добавить поля» из общего доступа только на себя:

Установить разрешение

Это не позволит другим добавлять новые поля в таблицу.

Точно так же перейдите в таблицу User и ограничьте разрешение «Добавить поля» для себя тоже.

Вы можете установить остальные разрешения на уровне класса в соответствии с вашими потребностями, но мы оставим это пока.

Прежде всего, давайте немного очистим панель навигации шаблона HTML, чтобы освободить место для новой страницы администратора. Измените элемент <nav> чтобы иметь только две ссылки: Home и Admin :

1
2
3
4
<nav class=»blog-nav»>
    <a class=»blog-nav-item active» href=»index.html»>Home</a>
    <a class=»blog-nav-item» href=»admin.html»>Admin</a>
</nav>

Затем admin.html index.html и переименуйте его в admin.html , продублируйте blog.js и переименуйте его в admin.js . (Для тех, кто знаком с концепцией маршрутизатора и ненавидит дублированный код, пожалуйста, подождите некоторое время. Я обещаю, что вы в конечном итоге научитесь пользоваться маршрутизатором и убирать вещи!)

В admin.html примените класс .active к правильной вкладке:

1
2
3
4
<nav class=»blog-nav»>
    <a class=»blog-nav-item» href=»index.html»>Home</a>
    <a class=»blog-nav-item active» href=»admin.html»>Admin</a>
</nav>

И ссылка на admin.js вместо blog.js :

1
<script src=»js/admin.js»></script>

Убедитесь, что все по-прежнему работает хорошо, и теперь мы можем быстро собрать HTML-код для страницы входа.

Тот же старый трюк, перейдите на http://getbootstrap.com/examples/signin и скопируйте HTML .form-signin в .main-container .

01
02
03
04
05
06
07
08
09
10
11
12
13
<div class=»main-container»>
    <form class=»form-signin» role=»form»>
        <h2 class=»form-signin-heading»>Please sign in</h2>
        <input type=»email» class=»form-control» placeholder=»Email address» required=»» autofocus=»»>
        <input type=»password» class=»form-control» placeholder=»Password» required=»»>
        <div class=»checkbox»>
            <label>
                <input type=»checkbox» value=»remember-me»> Remember me
            </label>
        </div>
        <button class=»btn btn-lg btn-primary btn-block» type=»submit»>Sign in</button>
    </form>
</div>

Получите стиль в signin.css и скопируйте его в наш blog.css , за исключением стиля body :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.form-signin {
    max-width: 330px;
    padding: 15px;
    margin: 0 auto;
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
    margin-bottom: 10px;
}
.form-signin .checkbox {
    font-weight: normal;
}
.form-signin .form-control {
    position: relative;
    height: auto;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    padding: 10px;
    font-size: 16px;
}
.form-signin .form-control:focus {
    z-index: 2;
}
.form-signin input[type=»email»] {
    margin-bottom: -1px;
    border-bottom-right-radius: 0;
    border-bottom-left-radius: 0;
}
.form-signin input[type=»password»] {
    margin-bottom: 10px;
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}

Наконец, избавьтесь от всего, что находится в admin.js ниже Parse.initialize() :

1
2
3
4
5
6
7
8
$(function() {
 
    Parse.$ = jQuery;
 
    // Replace this line with the one on your Quickstart Guide Page
    Parse.initialize(«HC87tn6aA7c3sYx9X0vwwLVXeqHDRMYYmrUBK5zv», «3piNGGnRMhvWo8u9pKD9TDc1MJlWhlvK78Vr3fHo»);
 
});

Теперь обновите страницу:

Страница авторизации

Хорошо смотритесь!

Несколько заключительных изменений на странице: мы будем использовать имя пользователя для входа в систему, поэтому измените поле электронной почты на текстовое поле и добавьте атрибут name в оба поля ввода:

1
2
<input type=»text» name=»username» class=»form-control» placeholder=»Username» required=»» autofocus=»»>
<input type=»password» name=»password» class=»form-control» placeholder=»Password» required=»»>

Измените CSS селектор с email на text соответственно:

1
2
3
4
5
.form-signin input[type=»text»] {
    margin-bottom: -1px;
    border-bottom-right-radius: 0;
    border-bottom-left-radius: 0;
}

И избавьтесь от флажка «Запомнить меня», потому что мы не планируем вдаваться в это в этом уроке.

Теперь мы наконец готовы включить логин. Давайте напишем admin.js JavaScript-функцию для входа пользователей, когда они нажимают « Отправить» в admin.js :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$(‘.form-signin’).on(‘submit’, function(e) {
 
    // Prevent Default Submit Event
    e.preventDefault();
 
    // Get data from the form and put them into variables
    var data = $(this).serializeArray(),
        username = data[0].value,
        password = data[1].value;
 
    // Call Parse Login function with those variables
    Parse.User.logIn(username, password, {
        // If the username and password matches
        success: function(user) {
            alert(‘Welcome!’);
        },
        // If there is an error
        error: function(user, error) {
            console.log(error);
        }
    });
 
});

Давайте попробуем…

Успешный вход

Все так просто: вы вошли в систему!

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

Чтобы сделать это изящно, мы создадим страницу входа и страницу приветствия в Views и обслужим их с помощью Parse.js.

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

01
02
03
04
05
06
07
08
09
10
11
12
<script id=»login-tpl» type=»text/x-handlebars-template»>
    <form class=»form-signin» role=»form»>
        <h2 class=»form-signin-heading»>Please sign in</h2>
        <input type=»text» name=»username» class=»form-control» placeholder=»Username» required=»» autofocus=»»>
        <input type=»password» name=»password» class=»form-control» placeholder=»Password» required=»»>
        <button class=»btn btn-lg btn-primary btn-block» type=»submit»>Sign in</button>
    </form>
</script>
 
<script id=»welcome-tpl» type=»text/x-handlebars-template»>
    <h2>Welcome, {{username}}!</h2>
</script>

Сейчас мы можем сделать приветствие очень простым. Он просто возьмет объект пользователя и отобразит имя пользователя.

Давайте определим эти представления в admin.js . Обратите внимание, что, поскольку LoginView не нужно визуализировать какой-либо объект, функция render просто помещает HTML-шаблон в DOM.

01
02
03
04
05
06
07
08
09
10
11
12
13
var LoginView = Parse.View.extend({
       template: Handlebars.compile($(‘#login-tpl’).html()),
       render: function(){
           this.$el.html(this.template());
       }
   }),
   WelcomeView = Parse.View.extend({
       template: Handlebars.compile($(‘#welcome-tpl’).html()),
       render: function(){
           var attributes = this.model.toJSON();
           this.$el.html(this.template(attributes));
       }
   });

Помните простую функцию входа в систему, которую мы имеем? Теперь вы можете сделать это событием в LoginView :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var LoginView = Parse.View.extend({
    template: Handlebars.compile($(‘#login-tpl’).html()),
    events: {
        ‘submit .form-signin’: ‘login’
    },
    login: function(e) {
 
        // Prevent Default Submit Event
        e.preventDefault();
 
        // Get data from the form and put them into variables
        var data = $(e.target).serializeArray(),
            username = data[0].value,
            password = data[1].value;
 
        // Call Parse Login function with those variables
        Parse.User.logIn(username, password, {
            // If the username and password matches
            success: function(user) {
                alert(‘Welcome!’);
            },
            // If there is an error
            error: function(user, error) {
                console.log(error);
            }
        });
    },
        render: function(){
        this.$el.html(this.template());
    }
})

Обратите внимание, что мы изменили $(this).serializeArray() на $(e.target).serializeArray() . Это потому, что в этом контексте this будет указывать на LoginView .

Прежде чем мы перейдем к отображению приветствия, давайте сначала представим представление входа в систему на реальной странице и посмотрим, работает ли оно:

1
2
3
var loginView = new LoginView();
loginView.render();
$(‘.main-container’).html(loginView.el);

Запустите его снова, и он работает так же, как и раньше.

Теперь давайте изменим функцию обратного вызова метода login() для отображения приветствия с использованием возвращенного user объекта.

1
2
3
4
5
success: function(user) {
    var welcomeView = new WelcomeView({ model: user });
    welcomeView.render();
    $(‘.main-container’).html(welcomeView.el);
}

Проверьте снова:

Экран приветствия

И да, это, безусловно, работает!

В этом сеансе вы создали свой второй класс: пользовательский класс. Вы также создали два важных представления: LoginView и WelcomeView. Вы также включили вход пользователя на свой веб-сайт, и теперь вы можете отправить личное приветственное сообщение своим пользователям.

Это только отправная точка построения панели администратора блога. Оставайтесь с нами, и в следующем уроке мы создадим новый вид и включим функцию «Добавить новый блог».