Статьи

Создание блогового приложения с использованием React: Часть 2. Регистрация пользователя

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

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

1
git clone https://github.com/royagasthyan/ReactBlogApp-SignIn

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

1
2
cd ReactBlogApp-SignIn
npm install

Запустите сервер Node.js, и приложение будет запущено по адресу http: // localhost: 7777 / index.html # / .

Для этого приложения вы будете использовать MongoDB в качестве серверной части. Следуйте инструкциям в официальной документации MongoDB для установки MongoDB в Ubuntu. После установки MongoDB вам понадобится соединитель для подключения MongoDB и Node.js. Установите драйвер MongoDB Node.js с помощью диспетчера пакетов Node (или npm):

1
npm install mongodb

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

Создайте файл с именем user.js котором вы будете хранить пользовательские материалы. Внутри файла user.js требуются клиентские зависимости MongoDB.

1
var MongoClient = require(‘mongodb’).MongoClient;

Вы будете использовать библиотеку assert для проверки возвращенного ответа. Включите assert в файл user.js

1
var assert = require(‘assert’);

Давайте назовем нашу базу данных Blog в MongoDB, поэтому URL нашей базы данных будет выглядеть так:

1
var url = ‘mongodb://localhost:27017/Blog’;

Внутри файла user.js создайте и экспортируйте функцию с именем signup .

1
2
3
4
5
module.exports = {
    signup: function(){
        // Code will be here
    }
}

Используя клиент MongoDB, попробуйте подключиться к базе данных. После подключения вы зарегистрируете подключенное сообщение в терминале.

1
2
3
4
5
6
7
module.exports = {
    signup: function(name, email, password){
        MongoClient.connect(url, function(err, db) {
            console.log(‘connected’)
        });
    }
}

После того, как вы настроили серверную часть MongoDB, давайте реализуем событие регистрации. main.jsx странице main.jsx событие on-change для текстовых полей ввода имени, main.jsx электронной почты и пароля в классе signup .

1
2
3
4
5
6
7
8
9
handleNameChange(e){
    this.setState({name:e.target.value})
}
handleEmailChange(e){
    this.setState({email:e.target.value})
}
handlePasswordChange(e){
    this.setState({password:e.target.value})
}

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

1
2
3
4
5
6
constructor(props) {
    super(props);
    this.handleNameChange = this.handleNameChange.bind(this);
    this.handleEmailChange = this.handleEmailChange.bind(this);
    this.handlePasswordChange = this.handlePasswordChange.bind(this);
}

Определите переменные состояния внутри конструктора класса signup .

1
2
3
4
5
this.state = {
  name:»,
  email:»,
  password:»
};

Определите метод регистрации внутри класса signup . Внутри метода регистрации, используя библиотеку axios , выполните вызов метода post для метода signup в файле user.js

01
02
03
04
05
06
07
08
09
10
11
12
13
signUp(){
    axios.post(‘/signup’, {
      name: this.state.name,
      email: this.state.email,
      password: this.state.password
    })
    .then(function (response) {
      console.log(response);
    })
    .catch(function (error) {
      console.log(error);
    });
}

Внутри функции signup в файле user.js вы реализуете вставку базы данных.

Добавьте обработчик запроса /signup в файл app.js как показано, для обработки события щелчка при регистрации. Внутри функции обработчика запроса /signup сделайте вызов метода user.signup .

1
2
3
4
app.post(‘/signup’, function (req, res) {
  user.signup(»,»,»)
  console.log(res);
})

Требуется файл user.js внутри файла app.js

1
var user = require(‘./user’)

Сохраните вышеуказанные изменения и перезагрузите сервер. В браузере укажите http: // localhost: 7777 / index.html # / signup, и у вас должна появиться страница регистрации Нажмите на кнопку Зарегистрироваться , и вы получите сообщение о connected в терминале.

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

Вы будете использовать метод insertOne для вставки одной записи в коллекцию пользователей. Измените код в методе регистрации в user.js как показано ниже:

1
2
3
4
5
6
7
8
db.collection(‘user’).insertOne( {
    «name»: name,
    «email»: email,
    «password»: password
},function(err, result){
    assert.equal(err, null);
    console.log(«Saved the user sign up details.»);
});

Вот полный код user.js :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
var MongoClient = require(‘mongodb’).MongoClient;
var assert = require(‘assert’);
var url = ‘mongodb://localhost:27017/Blog’;
 
module.exports = {
    signup: function(name, email, password){
        MongoClient.connect(url, function(err, db) {
            db.collection(‘user’).insertOne( {
                «name»: name,
                «email»: email,
                «password»: password
            },function(err, result){
                assert.equal(err, null);
                console.log(«Saved the user sign up details.»);
            });
        });
    }
}

Измените обработчик запроса /signup в файле app.js чтобы передать имя, адрес электронной почты и пароль user.js signup user.js

01
02
03
04
05
06
07
08
09
10
11
12
app.post(‘/signup’, function (req, res) {
  var name=req.body.name;
  var email=req.body.email;
  var password=req.body.password;
 
  if(name && email && password){
      user.signup(name, email, password)
  }
  else{
    res.send(‘Failure’);
  }
})

Сохраните вышеуказанные изменения и перезагрузите сервер. Укажите в браузере адрес http: // localhost: 7777 / index.html # / signup . Заполните данные регистрации пользователя и нажмите кнопку регистрации. У вас будет Saved the user sign up details. сообщение в серверном терминале. Войдите в оболочку MongoDB и проверьте коллекцию user в базе данных Blog . Чтобы найти сведения о пользователе, введите следующую команду в оболочке MongoDB:

1
db.user.find()

Приведенная выше команда отобразит данные пользователя в формате JSON.

1
2
3
4
5
6
{
    «name»: «roy»,
    «email»: «[email protected]»,
    «password»: «test»,
    «_id»: ObjectId(«58f622f50cb9b32905f1cb4b»)
}

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

Создайте функцию validateSignIn в файле user.js

1
2
3
validateSignIn: function(username, password,callback){
         
}

Внутри функции validateSignIn с помощью клиента MongoDB вы подключитесь к базе данных Blog и запросите таблицу пользователей для пользователя с указанными именем пользователя и паролем. Вы будете использовать метод findOne для запроса коллекции пользователей.

1
2
3
db.collection(‘user’).findOne( { email : username ,password: password },function(err, result){
     
});

Проверьте возвращаемый результат на null, если запись не найдена.

1
2
3
4
5
6
if(result==null){
    callback(false)
}
else{
    callback(true)
}

Как видно из приведенного выше кода, если запись не найдена, в обратном вызове возвращается false. Если запись найдена, в обратном вызове возвращается true.

Вот полный метод validateSignIn :

01
02
03
04
05
06
07
08
09
10
11
12
13
validateSignIn: function(username, password,callback){
    MongoClient.connect(url, function(err, db){
        db.collection(‘user’).findOne( { email : username ,password: password
        },function(err, result){
            if(result==null){
                callback(false)
            }
            else{
                callback(true)
            }
        });
    });
}

В методе /signin в файле app.js вы /signin метод validateSignIn . В функции обратного вызова вы будете проверять ответ. Если это правда, это будет указывать на действительный вход, в противном случае неправильный вход. Вот как это выглядит:

01
02
03
04
05
06
07
08
09
10
11
app.post(‘/signin’, function (req, res) {
 var user_name=req.body.email;
 var password=req.body.password;
 user.validateSignIn(user_name,password,function(result){
   if(result){
     res.send(‘Success’)
   }
   else{
     res.send(‘Wrong username password’)
   }
 });

Сохраните вышеуказанные изменения и перезагрузите сервер. Укажите в браузере адрес http: // localhost: 7777 / index.html # / . Введите правильное имя пользователя и пароль, и вы получите сообщение об успехе, зарегистрированное в консоли браузера. При вводе неверного имени пользователя и пароля будет отображаться сообщение об ошибке.

В этой части руководства вы увидели, как реализовать процесс регистрации пользователей. Вы увидели, как создать представление регистрации и передать данные из пользовательского интерфейса React в Node.js, а затем сохранить их в MongoDB. Вы также изменили функциональность входа пользователя для проверки правильности входа пользователя из базы данных MongoDB.

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

Исходный код из этого урока доступен на GitHub .

Дайте нам знать ваши мысли или любые предложения в комментариях ниже.