Содержание

javascript — Как сделать регистрацию через MySQL в react native

У меня есть страничка для регистрации, а также база данных проекта в mySQL WORKBENCH, как подключить базу данных к проекту и соответственно сделать регистрацию?

import { KeyboardAvoidingView, StyleSheet, Text, TextInput, Touchable, TouchableOpacity, View, Image } from 'react-native'
import React, {useState} from 'react'
import { useNavigation } from '@react-navigation/native'
export default function RegistrationScreen() {
  const navigation = useNavigation()
  const toLogin = () => {
    navigation.navigate('Login')
  }
  return (
    <KeyboardAvoidingView
      style={styles.container}
      behavior="padding"
      scrollEnabled={false}
      resetScrollToCoords={{ x: 0, y: 0 }}
    >
      <View style={styles.inputContainer}>
        <TextInput
          placeholderTextColor='rgba(207, 77, 79, 0.5)'
          placeholder='Имя'
          /* value={email} */
          /* onChangeText={text => setEmail(text)}  */
          style={styles.
input} /> <TextInput placeholderTextColor='rgba(207, 77, 79, 0.5)' placeholder='Фамилия' /* value={password} */ /* onChangeText={text => setPassword(text)} */ style={styles.input} secureTextEntry /> <TextInput placeholderTextColor='rgba(207, 77, 79, 0.5)' placeholder='Почта' /* value={password} */ /* onChangeText={text => setPassword(text)} */ style={styles.input} secureTextEntry /> <TextInput placeholderTextColor='rgba(207, 77, 79, 0.5)' placeholder='Пароль' /* value={password} */ /* onChangeText={text => setPassword(text)} */ style={styles.input} secureTextEntry /> <TextInput placeholderTextColor='rgba(207, 77, 79, 0.5)' placeholder='Потворите пароль' /* value={password} */ /* onChangeText={text => setPassword(text)} */ style={styles.
input} secureTextEntry /> </View> <View style={styles.buttonContainer}> <TouchableOpacity onPress={() => { }} style={styles.button} > <Text style={styles.button}>Зарегистрироваться</Text> </TouchableOpacity> <TouchableOpacity onPress={() => toLogin()} style={styles.registration} > </TouchableOpacity> </View> </KeyboardAvoidingView> ) } const styles = StyleSheet.create({ container:{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F3EFEF', marginTop: 100, }, inputContainer:{ width: 265, }, input:{ paddingHorizontal: 25, paddingVertical: 12, backgroundColor: '#FFFFFF', borderRadius: 5, marginTop: 25, fontSize: 20, elevation: 40, shadowColor: 'rgba(207, 77, 79, 0.5)', borderWidth: 2, borderColor: 'rgba(207, 77, 79, 0.
3)', }, buttonContainer:{ justifyContent: 'center', alignItems: 'center', marginTop: 80, flex: 1, }, button:{ backgroundColor: '#FFFFFF', width: 265, height: 50, textAlign: 'center', justifyContent: 'center', alignItems: 'center', borderRadius: 15, color: "rgba(207, 77, 79, 0.5)", fontSize: 24, paddingVertical: 9, elevation: 40, shadowColor: 'rgba(207, 77, 79, 0.5)', borderWidth: 2, borderColor: 'rgba(207, 77, 79, 0.3)', }, registration:{ marginTop: 40, paddingRight: 90, color: "rgba(207, 77, 79, 0.5)", textDecorationLine: 'underline', fontSize: 12, }, })

Подключение к MySQL и управление ими — Microsoft Purview

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья

В этой статье описывается, как зарегистрировать MySQL, а также как выполнять проверку подлинности и взаимодействие с MySQL в Microsoft Purview.

Дополнительные сведения о Microsoft Purview см. в вводной статье.

Поддерживаемые возможности

Извлечение метаданныхПолная проверкаДобавочная проверкаПроверка с заданной областьюКлассификацияДобавление метокПолитика доступаЖурнал преобразованийОбщий доступ к данным
ДаДаНетДаНетНетНетДаНет

Поддерживаемые версии сервера MySQL — от 5.7 до 8.x.

При сканировании источника MySQL Microsoft Purview поддерживает:

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

Известные ограничения

При удалении объекта из источника данных в настоящее время последующее сканирование не удаляет соответствующий ресурс в Microsoft Purview автоматически.

Предварительные требования

  • Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
  • Активная учетная запись Microsoft Purview.
  • Для регистрации источника данных и управления им на портале управления Microsoft Purview требуются разрешения администратора и читателя данных. Дополнительные сведения о разрешениях см. в статье Управление доступом в Microsoft Purview.

Примечание

Если хранилище данных не является общедоступным (если хранилище данных ограничивает доступ из локальной сети, частной сети или определенных IP-адресов и т. д.), необходимо настроить локальную среду выполнения интеграции для подключения к нему.

  • Если хранилище данных не является общедоступным, настройте последнюю локальную среду выполнения интеграции. Дополнительные сведения см. в руководстве по созданию и настройке локальной среды выполнения интеграции.
    • Убедитесь, что на компьютере с локальной средой выполнения интеграции установлен пакет JDK 11. Перезапустите компьютер после установки JDK, чтобы он вступил в силу.
    • Убедитесь, что на компьютере с локальной средой выполнения интеграции установлено обновление 4 Распространяемого компонента Visual C++ для Visual Studio 2012. Если это обновление не установлено, его можно скачать здесь.

Необходимые разрешения для сканирования

Пользователь MySQL должен иметь разрешения SELECT, SHOW VIEW и EXECUTE для каждой целевой схемы MySQL, содержащей метаданные.

Регистрация

В этом разделе описывается, как зарегистрировать MySQL в Microsoft Purview с помощью портала управления Microsoft Purview.

Действия для регистрации

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

  1. Перейдите к учетной записи Microsoft Purview на портале управления Microsoft Purview.
  2. В области навигации слева выберите Схема данных.
  3. Нажмите кнопку Зарегистрировать.
  4. В разделе Регистрация источников выберите MySQL. Выберите Continue (Продолжить).

На экране Регистрация источников (MySQL) выполните следующие действия.

  1. Введите Имя, под которым этот источник данных будет включен в каталог.

  2. Введите имя сервера для подключения к источнику MySQL. Возможные значения:

    • Имя узла, используемое для подключения к серверу базы данных. Пример: MyDatabaseServer.com
    • IP-адреса. Пример: 192.169.1.2
  3. Введите порт , используемый для подключения к серверу базы данных (по умолчанию 3306 для MySQL).

  4. Выберите коллекцию или создайте новую (необязательно).

  5. Щелкните Готово, чтобы завершить регистрацию источника данных.

Сканирование

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

Проверка подлинности для сканирования

Поддерживаемый тип проверки подлинности для источника MySQL — обычная проверка подлинности.

Создание и запуск проверки

Чтобы создать сканирование и выполнить его, выполните приведенные ниже действия.

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

    1. На портале управления Microsoft Purview перейдите в Центр управления и выберите Среды выполнения интеграции.
    2. Убедитесь, что доступна локальная среда выполнения интеграции. Если она не настроена, выполните описанные здесь действия, чтобы настроить локальную среду выполнения интеграции.
  2. На портале управления Microsoft Purview перейдите в раздел Источники.

  3. Выберите зарегистрированный источник MySQL.

  4. Выберите + Новое сканирование.

  5. Укажите следующие сведения:

    1. Имя: имя сканирования

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

    3. Учетные данные: выберите учетные данные для подключения к источнику данных. Не забудьте:

      • При создании учетных данных выберите Обычная проверка подлинности .
      • Укажите имя пользователя, используемое для подключения к серверу базы данных, в поле Ввода имя пользователя.
      • Сохраните пароль пользователя, используемый для подключения к серверу базы данных, в секретном ключе.
    4. База данных: список подмножества баз данных для импорта, выраженных в виде списка, разделенного точкой с запятой. Например, database1; database2. Все пользовательские базы данных импортируются, если список пуст. Все системные базы данных (например, SysAdmin) по умолчанию игнорируются.

      Для имен схем допускается синтаксис выражений в стиле SQL с использованием символов «%». Например: A%; %B; %C%; D

      • начинается со строки A;
      • заканчивается строкой B,
      • содержит строку C,
      • или строго равно D.

      Использование НЕ и специальных символов недопустимо.

    5. Максимальный доступный объем памяти (применимо при использовании локальной среды выполнения интеграции): максимальный объем памяти (в ГБ) на виртуальной машине клиента, который будет использоваться процессами сканирования. Это зависит от размера проверяемого источника MySQL.

      Примечание

      Как правило, требуется примерно 1 ГБ памяти на каждую 1000 таблиц.

  6. Выберите Continue (Продолжить).

  7. Выберите триггер проверки. Можно настроить расписание или запустить сканирование один раз.

  8. Просмотрите параметры проверки и выберите Сохранить и выполнить.

Просмотр данных о проверках и их выполнении

Чтобы просмотреть существующие проверки, выполните приведенные далее действия.

  1. Перейдите на портал управления Microsoft Purview. Перейдите на вкладку Карта данных на левой панели.
  2. Выберите нужный источник данных. Список существующих проверок в этом источнике данных можно просмотреть в разделе Последние проверки или просмотреть все проверки на вкладке Сканирование .
  3. Выберите проверку, результаты которой требуется просмотреть. На странице отображаются все предыдущие запуски проверки, а также состояние и метрики для каждого запуска сканирования.
  4. Щелкните идентификатор запуска, чтобы проверка дополнительные сведения о выполнении сканирования.

Управление проверкой: изменение, удаление и отмена

Для управления сканированием или его удаления сделайте следующее:

  1. Перейдите на портал управления Microsoft Purview. Выберите вкладку Карта данных на левой панели.

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

  3. Выберите проверку для управления. Затем можно:

    • Измените сканирование, выбрав Изменить проверку.
    • Отмените выполняемую проверку, выбрав Отмена выполнения сканирования.
    • Удалите сканирование, выбрав Удалить сканирование.

Примечание

  • Удаление сканирования не приводит к удалению созданных ресурсов из других сканирований.
  • Ресурс больше не будет обновляться с изменениями схемы, если исходная таблица была изменена и вы повторно просканируете исходную таблицу после изменения описания на вкладке Схема Microsoft Purview.

Журнал преобразований

После сканирования источника MySQL можно просмотреть каталог данных или выполнить поиск в каталоге данных , чтобы просмотреть сведения о ресурсе.

Перейдите на вкладку ресурс —> происхождение, где можно увидеть связь активов. Ознакомьтесь с разделом поддерживаемых возможностей о поддерживаемых сценариях происхождения данных MySQL. Дополнительные сведения о происхождении данных в целом см. в руководстве пользователя по происхождению данных и происхождению данных.

Дальнейшие действия

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

  • Data Estate Insights в Microsoft Purview
  • Происхождение данных в Microsoft Purview
  • Поиск в Каталоге данных

Зарегистрируйте экземпляр базы данных MySQL, Percona или Maria

Выполните следующие шаги, чтобы зарегистрировать отдельный экземпляр базы данных MySQL, Percona или Maria для мониторинга с помощью DPA.

Вы можете использовать мастер регистрации для регистрации экземпляра базы данных для чтения/записи MySQL. Чтобы зарегистрировать экземпляр только для чтения , см. Мониторинг экземпляра базы данных MySQL только для чтения в DPA.

Чтобы оптимизировать возможности отчетов DPA для экземпляра базы данных MySQL, Percona или Maria, см. требования для мониторинга экземпляров базы данных MySQL.

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

Если вы зарегистрируете экземпляр базы данных в течение 14-дневного пробного периода, DPA немедленно начнет отслеживать экземпляр. По истечении пробного периода необходимо активировать лицензию для мониторинга экземпляра базы данных.

Определите привилегированного пользователя

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

Для самостоятельно управляемых экземпляров баз данных MySQL, Percona или Maria:

  • Привилегированному пользователю требуется следующее разрешение: 

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ

  • Привилегированный пользователь должен иметь возможность предоставлять следующие разрешения:

    ПРОЦЕСС на *.*
    ВЫБОР И ОБНОВЛЕНИЕ для performance_schema. *

  • Чтобы включить получение планов выполнения запросов, привилегированный пользователь также должен иметь возможность предоставлять следующие разрешения:

    ВЫБОР, ВСТАВКА, ОБНОВЛЕНИЕ, УДАЛЕНИЕ в *.*
    СИСАДМ

Завершите работу мастера регистрации

  1. В левом верхнем углу домашней страницы DPA щелкните Зарегистрировать экземпляр БД для мониторинга.
  2. В разделе Самоуправляемые щелкните MySQL. Затем нажмите Далее.
  3. Введите следующую информацию о подключении:
    1. Введите имя хоста или IP-адрес и порт сервера.

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

    2. Создайте или укажите учетную запись, которую DPA будет использовать для сбора информации (пользователь мониторинга).

      SolarWinds рекомендует создать отдельную учетную запись для пользователя мониторинга.

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

      Если ваша база данных репозитория — Oracle, откроется панель табличного пространства репозитория Oracle. Если нет, перейдите к шагу 5.

  4. Если ваша база данных репозитория — Oracle, выберите табличное пространство в базе данных репозитория для хранения данных о производительности DPA для этого отслеживаемого экземпляра. Затем нажмите Далее.

    По умолчанию данные о производительности хранятся в табличном пространстве по умолчанию пользователя репозитория. Однако данные для отслеживаемых экземпляров можно хранить в отдельных табличных пространствах.

    Если ваша база данных репозитория не Oracle, мастер пропустит этот шаг.

  5. (Необязательно) Выберите группы предупреждений, к которым должен присоединиться новый экземпляр базы данных. Затем нажмите Далее.

  6. Выберите типичную или пользовательскую конфигурацию. SolarWinds рекомендует Типовую конфигурацию
    • Рекомендуется Типовая. С этой опцией:

      • Рекомендуемая опция DPA используется для настройки Performance Schema.
      • EXPLAIN может выполняться с операторами SELECT .
    • Выберите Пользовательский, чтобы изменить настройку схемы производительности и разрешить запуск EXPLAIN для разных операторов. Затем укажите, какие данные собирает и поддерживает Performance Schema. В этой таблице показано, какие потребители и инструменты включает каждый параметр.

      Схема производительности MySQL должна быть включена. Если вы выберете «Оставить как есть», убедитесь, что Global Instrumentation и Thread Instrumentation включены в существующей конфигурации Performance Schema.

      Consumer Global Instrumentation

      09
      03 ✔

      4333333 129 Потребительское ожидание (текущее) 2 909 9 31 ✔ 0130

      NC *

      Приборы для потребительской резьбы

      NC

      0 Потребительский дайджест

      НЗ

      Заявление потребителя (действующее)

      NC

        НЗ
      Ожидание прибора (блокировка/*)  0 1 NC
      Ожидание прибора (таблица ввода/вывода) (I/O/ файл)   НЗ
      Ожидание прибора (ввод/вывод/гнездо)   НЗ
      Ожидание прибора (Синхронизация/*)   НЗ

      * НЗ = без изменений. DPA не изменяет существующую конфигурацию Performance Schema.

      Значения, которые находятся за пределами области конфигурации MYSQL_PERFORMANCE_SCHEMA DPA, не изменяются. Например, инструмент с именем stage существует в схеме производительности MySQL. Если вы включите или отключите этот инструмент, DPA не изменит его.

    • Если вы указали привилегированного пользователя для создания пользователя мониторинга DPA, отображается раздел Разрешить выполнение EXPLAIN для. Выберите, для каких типов операторов вы хотите, чтобы DPA собирал планы выполнения. Пользователь мониторинга может запустить EXPLAIN для выбранных типов операторов.

    • Просмотрите информацию и щелкните Зарегистрировать экземпляр базы данных.

    • Когда регистрация будет завершена, нажмите Готово, чтобы вернуться на главную страницу DPA.

    • Простой сервер регистрации и входа с использованием NodeJS и MySQL | by Prashant Ram

      Как создать простой (но производственный уровень) серверную часть регистрации и аутентификации (т.е. входа) в NodeJS и MySQL — с нуля менее чем за час.

      В этом посте мы сначала установим и настроим БД mySQL с нуля. Затем мы создадим базовый сервер регистрации с использованием NodeJS, который сохранит имя пользователя/(хешированные) пароли в базе данных mySQL. Затем мы создадим систему входа для аутентификации зарегистрированных пользователей, которые вводят правильное имя пользователя/пароль.

      (a) Установите mySQL

      Загрузите MySQL Community Server с
      https://dev.mysql.com/downloads/mysql/

      Примечание. Поскольку я использую Mac OS Catalina 10.15, я скачал
      MySQL 8.0.26 (совместимость x86 с Catalina 10.15)

      (b) Установка mySQL Workbench

      Это инструмент с графическим интерфейсом, позволяющий легко работать с mySQL.
      Загрузите MySQL Workbench с
      https://downloads.mysql.com/archives/workbench/

      Примечание. Поскольку я использую Mac OS Catalina 10.15, я скачал
      с Catalina 10.15)

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

      (c) Создайте новую базу данных

      Щелкните значок «Создать новую схему» на панели инструментов mySQL Workbench и назовите новую схему «userDB» , затем нажмите «Применить» в правом нижнем углу. сторона.

      Теперь вы увидите базу данных «userDB» на левой боковой панели. Нажмите на него, чтобы развернуть «userDB», затем наведите указатель мыши на userDB → Tables и щелкните правой кнопкой мыши, чтобы «Создать таблицу»

      (d) Создайте userTable в userDB

      Создайте таблицу со следующими столбцами

      • userId: INTEGER — Первичный ключ (PK), не нулевой (NN), автоинкремент (AI)
      • пользователь: VARCHAR(45) — не нулевой (NN) пароль

        16

        4:
      • 4 6

        VARCHAR (100) — Not Null (NN)

      Нажмите «Применить» в правом нижнем углу и создайте эту таблицу.

      ПОЗДРАВЛЯЕМ!!!

      Вы завершили всю необходимую настройку MySQL. Вы можете увидеть «userTable» под «userDB»

      (e) (Необязательно) Создайте нового пользователя в mySQL

      Хотя вы можете использовать пользователя root для подключения к вашей базе данных через Node JS, лучше создать нового пользователя и назначить ему ограниченные привилегии, которые включите строки READ, INSERT, DELETE в вашу БД. Вы не хотите назначать права администратора базы данных новому пользователю.

      Чтобы создать нового пользователя, щелкните вкладку «Администрирование» в левом верхнем углу и перейдите в «Пользователи и права», а затем нажмите кнопку (ДОБАВИТЬ УЧЕТНУЮ ЗАПИСЬ) внизу.

       Имя для входа:  newuser  
      Тип аутентификации: Standard
      Ограничение на соответствие хостов: localhost
      Пароль: password1#

      БД MySQL.

      Нажмите ПРИМЕНИТЬ в правом нижнем углу, чтобы создать нового пользователя.

      Затем перейдите на вкладку SCHEMA PRIVILEGES и выберите (ADD ENTRY)

      Теперь добавьте привилегии ТОЛЬКО для операций CRUD строк

      Нажмите «Применить».

      Теперь ваш новый пользователь настроен, и мы будем получать доступ к базе данных mySQL, используя этого нового пользователя!

      (a) Создайте новую папку и инициализируйте приложение NodeJS

       $ mkdir db-practice1 
      $ cd db-practice1
      $ npm init --y // далее мы установим некоторые пакеты узлов $ npm i express mysql
      $ npm i nodemon dotenv --save-dev // Мы установили «express» и «mysql», а также «nodemon» и «dotenv» как devDependencies

      (b) Подключите приложение NodeJS к базе данных mySQL

      Создайте файл dbServer.js следующим образом:

       const express = require("express") 
      const app = express()const mysql = require("mysql")const db = mysql.createPool({
      connectionLimit: 100,
      host: "127. 0.0.1" , //Это ваш локальный IP-адрес
      пользователя: " newuser ", // "newuser " созданный на шаге 1(e) пароль
      : " password1# ", // пароль для нового пользователя
      database: " userDB ", // Имя базы данных
      port: " 3306 " // Имя порта, "3306" по умолчанию
      })db.getConnection(( err , connection )=> { if ( err ) throw ( err )
      console.log ("БД успешно подключена: " + соединение .threadId)})

      Теперь запустите файл dbServer.js $0310 node, $0310 9mon dbServer

      Если все ваши учетные данные верны, вы увидите сообщение «DB успешно подключено».

      ЗАМЕЧАТЕЛЬНО!! Теперь вы подключены к вашей БД mySQL!!!

      Примечание: мы используем mysql.createPool() вместо mysql.createConnection() , так как мы хотим, чтобы наше приложение было PRODUCTION класса.

      • *Устранение неполадок: Если все ваши учетные данные для входа в систему в порядке, и вы получаете сообщение об ошибке подключения, запустите следующее в вашем mySQL Workbench
       ALTER USER  'newuser'@'localhost'  ИДЕНТИФИКАЦИЯ С mysql_native_password BY '  password1 #  '; FLUSH PRIVILEGES; (c) Создайте файл .env и спрячьте туда свои учетные данные БД  

      Создайте файл .env следующим образом:

       DB_HOST = 127.0.0.1 
      DB_USER = newuser
      DB_PASSWORD = password1#
      DB_DATABASE = userDB
      3 0_PORT =
      3 0_PORT0399

      В файле dbServer.js используйте «dotenv» для импорта учетных данных из файла .env.

        require("dotenv").config()  const DB_HOST = process.env.DB_HOST 
      const DB_USER = process.env.DB_USER
      const DB_PASSWORD = process.env.DB_PASSWORD
      const DB_DATABASE = process. env.90DATABASE const DB_PORT = process.env.DB_PORTconst db = mysql.createPool({
      connectionLimit: 100,
      хост: DB_HOST,
      пользователь: DB_USER,
      пароль: DB_PASSWORD,
      база данных: DB_DATABASE,
      порт: DB_PORT
      }) //не забудьте включить .env в .gitignore 0 0 файл 0016 (a) Запустите сервер NodeJS

      Добавить следующее: dbServer.js файл

       const port = process.env.PORTapp.listen(port, 
      ()=> console.log(`Сервер запущен на порту ${port}...`))

      Как только вы сохраните файл, nodemon обновится и запустит ваш сервер Express JS!

      (b) Зарегистрируйте нового пользователя (сохраните в базе данных mySQL)

      Теперь вы готовы создать маршруты для регистрации нового пользователя. Обратите внимание, что мы будем использовать bcrypt для хранения хешированных паролей в нашей БД.

      Итак, давайте сначала npm установим bcrypt.

       $ npm i bcrypt 

      Теперь давайте добавим в ваш dbServer.js маршрут к «createUser» читать req.body.
      //СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
      app.post(" /createUser ", async (req,res) => {const user = req.body.name;
      const hashedPassword = await bcrypt. hash (req.body.password, 10) ; db.getConnection ( async (ошибка, соединение) => { if (err) throw (err) const sqlSearch = "SELECT * FROM userTable WHERE user =?"
      const search_query = mysql. format(sqlSearch,[user]) const sqlInsert = "ВСТАВИТЬ В ЗНАЧЕНИЯ userTable (0,?,?)"
      const insert_query = mysql.format(sqlInsert,[user, hashedPassword])
      // ? будут заменены значениями
      // ?? будет заменено строкой
      await connection.query ( search_query , async (err, result) => { if (err) throw (err)
      console. log("------> Search Results" )
      console.log(result.length) if (result.length != 0) {
      connection.release()
      console.log("------> Пользователь уже существует")
      res.sendStatus(409)
      }
      else {
      await connection.query ( insert_query , (ошибка, результат) => { connection.release() if (ошибка) throw (ошибка)
      console.log ("--- -----> Создан новый пользователь")
      console.log(result.insertId)
      res.sendStatus(201)
      })
      }}) // конец подключения. запрос() }) // end of db.getConnection() }) //end of app.post()

      Хотя приведенный выше код может показаться сложным, вот что мы делаем,

       1. Сначала мы сохраняем «req.body.name» в «user»2. Затем мы используем функцию bcrypt.hash() для хеширования «пароля». ПРИМЕЧАНИЕ. Функция  bcrypt.hash()  может занять некоторое время для генерации хеша, поэтому мы используем ключевое слово  «ожидание»  впереди этого.  Поскольку мы используем ключевое слово  «ожидание»  внутри функции, нам нужно добавить ключевое слово  «async»  перед функцией.  «async» и «await» — это в основном «синтаксический сахар» или более аккуратный способ написания обещаний в Javascript.  В идеале мы хотим включить часть «ожидание» в блок «попробовать/отловить», который представляет части обещания «разрешить/отклонить». Однако мы воздержимся от этого, чтобы наш код был простым и читабельным для целей этого руководства.3. Затем мы используем функцию  db.getConnection()  для получения нового соединения. Эта функция может иметь 2 результата: либо «ошибка», либо «соединение». то есть db.getConnection ( (ошибка, соединение) )4. В случае, если мы получаем соединение, мы можем ЗАПРОСИТЬ соединение, используя  соединение.запрос()  . Обратите внимание, что, поскольку ответ функции query() может занять некоторое время, мы используем перед ней ключевое слово «ожидание».  Соответственно нам нужно включить ключевое слово «async» перед родительской функцией. 
      , то есть db.getConnection ( async (ошибка, соединение) => {
      await connection.query(<запрос>)
      })5. Конструкция строк запроса особенно интересна, const sqlSearch = "SELECT * FROM userTable WHERE user = ?"
      константа search_query = mysql. format(sqlSearch,[user]) const sqlInsert = "ВСТАВИТЬ В ЗНАЧЕНИЯ userTable (0,?,?)"
      const insert_query = mysql.format(sqlInsert,[user, hashedPassword]) ПРИМЕЧАНИЕ. В основном ? будут заменены значениями в [] Также обратите внимание, что в запросе INSERT мы используем ( 0 ,?,?), потому что первый столбец в нашей userDB является столбцом AUTOINCREMENT. Итак, мы передаем либо «0», либо «null», и база данных mySQL назначит следующее значение автоинкремента со своей стороны
      т.е. нам не нужно передавать значение в запросе, и мы хотим, чтобы БД mySQL присваивала значение с автоинкрементом. 6. Причина, по которой у нас есть «search_query» и «insert_query» , заключается в том, что мы хотим проверить, существует ли уже «пользователь» в нашей базе данных MySQL.
      - В случае, если они есть, мы не добавляем их снова ("Пользователь уже существует"). - В случае, если их НЕ существует, мы добавляем их в БД.7. Обратите внимание, что после того, как мы сделали запрос, нам больше не нужно соединение, и мы должны вызвать connection.release() 8. Функция connection.query() выдаст либо ошибку, либо результат. то есть connection.query((ошибка, результат) )9. "Результаты" возвращают каждую ROW как объект в массиве.
      Таким образом, если "search_query" results.length==0, то ROW не были возвращены, указывая на то, что пользователь не существует в базе данных

      Теперь, когда мы поняли код, давайте сохраним его и позволим nodemon перезапустить сервер.

      ВАША РЕГИСТРАЦИЯ ЗАВЕРШЕНА!!!

      Чтобы протестировать нашу серверную часть регистрации, мы можем использовать POSTMAN для добавления нового пользователя следующим образом:

      Ура!!! Ваш пользователь успешно создан и сохранен в БД mySQL!!

      Теперь в вашей базе данных mySQL вы увидите, что новый пользователь сохранен вместе с (хешированным) паролем.

      Также обратите внимание, что в базе данных mySQL «userId» показывает 1 , хотя мы явно не указали это в нашем «insert_query». Причина этого в том, что когда мы создавали БД на шаге 1(d), мы указали, что «userId» будет «AUTO INCREMENT», а в запросе INSERT мы оставили это поле «0» или «null».

      Таким образом, БД mySQL автоматически присваивает уникальное значение автоинкремента этому столбцу, когда мы вставляем новую запись в БД.

      ПРИМЕЧАНИЕ. Журналы вашей консоли покажут, что приложение проверило, существует ли «Brent» в базе данных, и, поскольку этого пользователя не было, «Brent» и его «hashedPassword» были добавлены в базу данных mySQL.

      ПРИМЕЧАНИЕ. Если вы снова попытаетесь добавить «Brent», вы увидите следующие ,

      И ваши журналы будут показывать следующие

      Очень круто !!


      Теперь, используя POSTMAN, давайте добавим еще несколько уникальных пользователей в нашу БД mySQL. Я добавил «Кайл», «Майк», «Джо».

      Обратите внимание, что, поскольку мы храним hashedPasswords, наша система достаточно безопасна, поскольку даже если userDB скомпрометирована, хакер не может получить пароли непосредственно из userTable.

      (d) Аутентификация зарегистрированного пользователя (т.е. вход в систему)

      Хорошо, теперь, когда мы создали систему регистрации и можем создавать и сохранять новых пользователей/пароли в базе данных mySQL, давайте создадим систему входа, которая будет аутентифицировать пользователей, которые пытаются войти в систему с правильным именем пользователя и паролем.

       Шаги аутентификации будут следующими: 1. Считайте  "имя"  и  "пароль"  из req.body2.  Поиск, чтобы увидеть, существует ли имя пользователя в базе данных,  
      - Если не существует, верните ошибку 404
      - Если существует, то получите "hashedPassword" , хранящийся в DB3. Сравните «пароль» с «hashedPassword», используя bcrypt. compare(, ) 4. если bcrypt.compare() возвращает true , пароли совпадают и пользователь аутентифицирован !!

      Код для этого выглядит следующим образом:

        //ВХОД (АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ)  
      app.post("/login", (req, res)=> {const user = req.body.name
      const password = req.body.passworddb.getConnection ( async (ошибка, соединение) => { if (ошибка) throw (ошибка)
      const sqlSearch = "Выбрать * из таблицы пользователей, где пользователь = ?"
      const search_query = mysql.format(sqlSearch,[user]) await connection.query(search_query, async (ошибка, результат) => { connection.release()

      if (err) throw (err) if (result.length == 0) {
      console.log(" --------> Пользователь не существует ")
      res.sendStatus(404)
      }
      else {
      const hashedPassword = result[0].password
      // получить hashedPassword из результата if ( await bcrypt. compare(password, hashedPassword) ) {
      console.log(" -- -------> Вход в систему выполнен успешно ")
      res.send(`${user} вошел в систему!`)
      }
      else {
      console.log(" ---------> Неверный пароль ")
      res.send("Неверный пароль!")
      } //конец bcrypt.compare() } //конец пользователя существует, т.е. результаты .length==0 }) //конец connection.query() }) //конец db.connection() }) //конец app.post()

      Проверим это с использованием Postman

      • Давайте использовать несуществующего пользователя
      Пользователь не существует
      • Теперь давайте использовать существующего пользователя, но с неверным паролем
      Пользователь существует, но пароль неверный
      • Давайте теперь воспользуемся существующим пользователем и введем правильный пароль
      Успешная аутентификация!

      ВАШ ВХОД ЗАВЕРШЕН!!!

      (e) (Необязательно) При входе в систему возвращайте accessToken

      В реальных системах после аутентификации пользователя мы обычно хотим поддерживать сеансы для пользователя. Один из способов сделать это — использовать управление сеансом без сохранения состояния с использованием токенов JWT.

      Вы можете узнать больше о том, как поддерживать сеансы с помощью accessToken и refreshTokens в моем посте здесь:
      https://medium.com/@prashantramnyc/authenticate-rest-apis-in-node-js-using-jwt-json-web-tokens-f0e97669aad3

      Мы можем улучшить нашу систему АУТЕНТИФИКАЦИИ и вернуть токен доступа для аутентифицированного пользователей после успешного входа в систему.

        const generateAccessToken = require("./generateAccessToken") 
      //импорт функции generateAccessToken //ВХОД (АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ и возврат accessToken) res)=> {const пользователь = req.body.name
      const пароль = req.body.passworddb.getConnection ( async (ошибка, соединение) => {if (ошибка) throw (ошибка)
      const sqlSearch = "Выбрать * из userTable где user = ?»
      const search_query = mysql. format(sqlSearch,[user]) await connection.query(search_query, async (ошибка, результат) => {connection.release()

      if (ошибка) throw ( err)if (result.length == 0) {
      console.log("--------> Пользователь не существует")
      res.sendStatus(404)
      }
      else {
      const hashedPassword = result[0].password
      // получить hashedPassword из результата if ( await bcrypt.compare(password, hashedPassword) ) {
      console.log("-- -------> Вход выполнен успешно")
      console.log("---------> Генерация accessToken")
      const token = generateAccessToken({user: user})
      console.log( token)
      res.json({accessToken: token})

      } else {
      res.send("Неверный пароль!")
      } //конец пароля неверный } //конец пользователя существует }) //конец connection.query() }) //конец db.connection() }) // end of app.post()

      Чтобы сгенерировать accessToken, вы можете добавить следующую функцию в файл generateAccessToken. js и импортировать ее в свой dbServer.js .

      Обратите внимание, что мы будем использовать библиотеку «jsonwebtoken» для создания токенов jwt, поэтому давайте сначала установим ее.

       $ npm i jsonwebtoken 

      Ваш файл generateAccessToken.js будет выглядеть следующим образом:

       const jwt = require("jsonwebtoken") function generateAccessToken (user) {return 
      jwt.sign(user, process.env.ACCESS_TOKEN_SECRET, { expiresIn: "15m"}) }module.exports=generateAccessToken

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

      Возвращает accessToken при успешной аутентификации

      Этот простой код регистрации и входа является стандартным шаблоном кода производственного уровня для серверной части регистрации и аутентификации в NodeJS и mySQL.

      Добавить комментарий

      Ваш адрес email не будет опубликован. Обязательные поля помечены *