Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser Passport avec Sequelize et MySQL

Sequelize est un ORM Node.js basé sur des promesses. Il peut être utilisé avec PostgreSQL, MySQL, MariaDB, SQLite et MSSQL. Dans ce didacticiel, nous allons implémenter l'authentification pour les utilisateurs d'une application Web. Et nous utiliserons Passport, le middleware d'authentification populaire pour Node, avec Sequelize et MySQL pour implémenter l'enregistrement et la connexion des utilisateurs.

Mise en route

Assurez-vous que les éléments suivants sont installés sur votre ordinateur :

  • Nœud
  • MySQL

Pour ce didacticiel, nous utiliserons Node.js avec Express, nous allons donc de l'avant et commençons à installer ce dont nous avons besoin.

Étape 1 :Générer un fichier package.json

Créez un répertoire pour votre application. Dans ce répertoire, exécutez-le depuis votre terminal ou l'invite de commande :

 npm init

Cela initialise le gestionnaire de dépendances npm. Cela présentera une série d'invites que nous allons parcourir rapidement.

  • Tapez le nom de votre application sans espaces et appuyez sur Entrée pour "nom".
  • Appuyez sur Entrée pour la 'version'.
  • Pour  'description', dans ce didacticiel, nous allons saisir "Utilisation de Passport avec Sequelize et MySQL" comme description et appuyer sur Entrée. Cela peut aussi être vide.
  • Pour "point d'entrée (index.js)", saisissez server.js et appuyez sur Entrée.
  • Pour 'test command', appuyez sur Entrée.
  • Pour 'git repository', vous pouvez entrer le dépôt git où réside votre application si vous en avez un ou simplement appuyer sur Entrée pour laisser ce champ vide.
  • Pour "Mots clés", appuyez sur Entrée.
  • Pour "auteur", appuyez sur Entrée ou saisissez votre nom avant de le faire.
  • Pour "licence", appuyez sur Entrée.
  • Pour '(Is this okay )', cela vous montre à quoi ressemblera votre package.json. Tapez Oui et appuyez sur Entrée.

Étape 2 :Installer les dépendances

Les principales dépendances de ce didacticiel sont :

  • Express
  • Séqueliser
  • MySQL
  • Passeport
  • Stratégie locale de passeport
  • Analyseur de corps
  • Séance express
  • Bcrypt Nodejs
  • Express Handlebars pour les vues 

Pour les installer, depuis votre terminal ou invite de commande, lancez les suivants les uns après les autres.

npm installer express --savenpm installer sequelize --savenpm installer mysql --savenpm installer passeport --savenpm installer passeport-local --savenpm installer body-parser --savenpm installer express-session --savenpm installer bcrypt-nodejs - -savenpm install express-handlebars --save

Si vous utilisez Git pour ce projet :

Dans votre dossier de projet, créez un fichier .gitignore.

Ajoutez cette ligne au fichier .gitignore.

node_modules

Étape 3 :Configurer l'application

Maintenant, nous créons un fichier serveur. Ce sera le fichier principal appelé lorsque vous tapez ce qui suit :

début npm

Cela exécute l'application. Vous pouvez également exécuter l'application en tapant node server.js.

node server.js

Ensuite, dans notre dossier de projet, nous créons un nouveau fichier et nommons ce fichier server.js .

À l'intérieur de server.js fichier, nous collons ce qui suit :

var express =require('express');var app =express();app.get('/', function(req, res) { res.send('Bienvenue dans Passport avec Sequelize');});app.listen(5000, function(err) { if (!err) console.log("Site is live"); else console.log(err)});

La première ligne attribue le module express à une variable express. Nous initialisons ensuite express et lui nommons une variable :app.

Ensuite, nous faisons écouter l'application sur le port 5000 . Vous pouvez choisir n'importe quel numéro de port libre sur votre ordinateur.

Ensuite, nous appelons le app.get() fonction de routage express pour répondre par "Bienvenue dans Passport avec Sequelize" lorsqu'une requête GET est faite à "/".

Pour tester sur votre ordinateur, exécutez ceci depuis le dossier de votre projet :

node server.js

Si vous voyez le texte "Bienvenue dans Passport avec Sequelize" lorsque vous visitez http://localhost:5000/ alors félicitations ! Sinon, vérifiez que vous avez tout fait exactement comme il est écrit ci-dessus.

Ensuite, nous importons certains modules dont nous avons besoin, comme passport, express-session et body-parser.

Après var app = express() nous ajoutons les lignes suivantes :

var passeport =require('passport')var session =require('express-session')var bodyParser =require('body-parser')

Dans les deux premières lignes, nous importons le module de passeport et la session express, dont nous avons besoin pour gérer l'authentification.

Ensuite, nous importons le module body-parser. Cela extrait toute la partie du corps d'une demande entrante et l'expose dans un format plus facile à utiliser. Dans ce cas, nous utiliserons le format JSON.

Pour permettre à notre application d'utiliser l'analyseur de corps, nous ajoutons ces lignes quelques espaces sous les lignes d'importation :

//Pour BodyParserapp.use(bodyParser.urlencoded({ extended :true }));app.use(bodyParser.json());

Ensuite, nous initialisons le passeport et la session express et la session de passeport et les ajoutons tous les deux en tant que middleware. Nous faisons cela en ajoutant ces lignes quelques espaces après la ligne d'importation bodyParser.

// For Passportapp.use(session({ secret :'keyboard cat',resave :true, saveUninitialized:true})); // session secretapp.use(passport.initialize());app.use(passport.session()); // sessions de connexion persistantes

Nous allons commencer à travailler sur l'authentification proprement dite maintenant.

Nous procéderons en quatre étapes :

  • Configurer Sequelize avec MySQL.
  • Créez le modèle utilisateur.
  • Configurer les vues.
  • Rédiger une stratégie de passeport.

1. Configurer Sequelize avec MySQL

Tout d'abord, nous créons une base de données dans MySQL. Donnez-lui votre nom préféré. Pour les besoins de ce tutoriel, créons une base de données nommée sequelize_passport dans MySQL.

Ensuite, nous configurons la configuration pour gérer les détails de la base de données.

Tout d'abord, importons le module dot-env pour gérer les variables d'environnement.

Exécutez ceci dans votre dossier de projet racine :

npm install --save dotenv

Ensuite, nous l'importons dans le fichier du serveur principal, server.js, juste en dessous des autres importations.

var env =require('dotenv').load(); 

Ensuite, nous créons un fichier dans notre dossier de projet et le nommons .env.

Cette prochaine étape à suivre est facultative si vous n'utilisez pas Git :

Nous ajouterons le fichier .env à votre fichier .gitignore.

Votre fichier .gitignore devrait ressembler à ceci :

node_modules.env

Après cela, nous ajoutons notre environnement au fichier .env en ajoutant cette ligne :

NODE_ENV='development'

Ensuite, nous créons un fichier config.json qui sera utilisé par Sequelize pour gérer différents environnements.

La première chose à faire est de créer un dossier nommé config dans notre dossier de projet. Dans ce dossier, nous créons un config. json dossier. Ce fichier doit être ignoré si vous poussez vers un référentiel. Pour cela, ajoutez le code suivant à votre .gitignore :

config/config.json

Ensuite, nous collons le code suivant dans notre fichier config.json.

{ "development":{ "username":"root", "password":null, "database":"sequelize_passport", "host":"127.0.0.1", "dialect":"mysql" }, "test":{ "username":"", "password":null, "database":"", "host":"", "dialect":"mysql" }, "production":{ "username":"", "password":null, "database":"", "host":"127.0.0.1", "dialect":"mysql" }}

N'oubliez pas de remplacer les valeurs dans le bloc de développement ci-dessus par les détails d'authentification de votre base de données.

Ensuite, nous installons sequelize avec npm. Pour ce faire, exécutez la commande suivante dans le dossier racine du projet :

npm install --save sequelize

Il est maintenant temps de créer les modèles dossier.

Tout d'abord, nous créons un répertoire nommé app dans notre dossier de projet.

Dans l'application  dossier, nous créons un nouveau dossier nommé modèles et créez un nouveau fichier nommé index.js dans les modèles dossier.

Dans le fichier index.js, nous collons le code ci-dessous.

"use strict";var fs =require("fs");var path =require("path");var Sequelize =require("sequelize");var env =process.env.NODE_ENV || "development";var config =require(path.join(__dirname, '..', 'config', 'config.json'))[env];var sequelize =new Sequelize(config.database, config.username, config .password, config);var db ={};fs .readdirSync(__dirname) .filter(function(file) { return (file.indexOf(".") !==0) &&(file !=="index. js"); }) .forEach(function(file) { var model =sequelize.import(path.join(__dirname, file)); db[model.name] =model; });Object.keys(db). forEach(function(modelName) { if ("associate" in db[modelName]) { db[modelName].associate(db); }});db.sequelize =sequelize;db.Sequelize =Sequelize;module.exports =db;

Ce fichier est utilisé pour importer tous les modèles que nous plaçons dans les modèles dossier et exportez-les.

Pour tester que tout va bien, nous ajoutons ceci dans notre fichier server.js.

//Modelsvar models =require("./app/models");//Sync Databasemodels.sequelize.sync().then(function() { console.log('Nice ! La base de données a l'air bien')}) .catch(function(err) { console.log(err, "Quelque chose s'est mal passé avec la mise à jour de la base de données!")});

Ici, nous importons les modèles, puis appelons la fonction Sequelize sync.

Exécutez ceci pour voir si tout va bien :

node server.js

Si vous obtenez le message "Site is live Nice! Database looks fine", alors vous avez configuré Sequelize avec succès.

Si ce n'est pas le cas, veuillez suivre attentivement les étapes ci-dessus et essayez de déboguer le problème avec de l'aide.

2. Créer le modèle utilisateur

La prochaine chose que nous allons faire est de créer le modèle utilisateur, qui est essentiellement la table utilisateur. Celui-ci contiendra des informations utilisateur de base.

Dans nos modèles dossier, nous créons un fichier et le nommons user.js . Le chemin complet de ce fichier doit être app/models/user.js.

Ouvrez le fichier user.js et ajoutez le code suivant :

module.exports =function(sequelize, Sequelize) { var User =sequelize.define('user', { id :{ autoIncrement :true, primaryKey :true, type :Sequelize.INTEGER }, firstname :{ type :Sequelize .STRING, notEmpty :vrai }, nom :{ type :Sequelize.STRING, notEmpty :vrai }, nom d'utilisateur :{ type :Sequelize.TEXT }, à propos de :{ type :Sequelize.TEXT }, e-mail :{ type :Sequelize.STRING , valider :{ isEmail :true } }, mot de passe :{ type :Sequelize.STRING, allowNull :false }, last_login :{ type :Sequelize.DATE }, statut :{ type :Sequelize.ENUM('actif', 'inactif' ), valeur par défaut :'active' } }); renvoyer l'utilisateur ; }

Exécutez maintenant :

node server.js

Vous devriez voir le familier "Le site est en ligne. Sympa ! Base de données a l'air bien. ". Cela signifie que nos modèles Sequelize ont été synchronisés avec succès, et si vous vérifiez votre base de données, vous devriez voir une table d'utilisateurs avec les colonnes spécifiées présentes.

3 :Configurer les vues

Tout d'abord, créons la vue pour l'inscription et connectons-la.

La première chose à faire est d'importer le module express handlebars que nous utilisons pour les vues dans ce tutoriel.

Ajoutez cette ligne au fichier de démarrage principal, server.js.

var exphbs = require('express-handlebars')

Votre bloc d'importation devrait ressembler à ceci à ce stade.

var express =require('express')var app =express()var passeport =require('passport')var session =require('express-session')var bodyParser =require('body-parser')var env =require('dotenv').load()var exphbs =require('express-handlebars')

Ensuite, nous ajoutons les lignes suivantes dans notre fichier server.js.

//Pour le guidonapp.set('views', './app/views')app.engine('hbs', exphbs({ extname :'.hbs'}));app.set('view engine ', '.hbs');

Maintenant, dans notre dossier d'application, nous créons trois dossiers nommés views, contrôleurs, et itinéraires .

Dans le dossier des vues, nous créons un fichier nommé signup. hbs et collez-y le code ci-dessous.