sql >> Database teknologi >  >> RDS >> Mysql

Brug af Passport med Sequelize og MySQL

Sequelize er en løftebaseret Node.js ORM. Det kan bruges med PostgreSQL, MySQL, MariaDB, SQLite og MSSQL. I denne vejledning implementerer vi godkendelse for brugere af en webapp. Og vi vil bruge Passport, den populære autentificerings-middleware til Node, sammen med Sequelize og MySQL til at implementere brugerregistrering og login.

Kom godt i gang

Sørg for, at du har følgende installeret på din maskine:

  • Node
  • MySQL

Til denne vejledning vil vi bruge Node.js sammen med Express, så vi går videre og begynder at installere det, vi har brug for.

Trin 1:Generer en package.json-fil

Opret en mappe til din app. Inde i denne mappe skal du køre dette fra din terminal eller kommandoprompt:

 npm init

Dette initialiserer npm Dependency Manager. Dette vil præsentere en række meddelelser, som vi hurtigt vil gennemgå.

  • Skriv navnet på din app uden mellemrum, og tryk på Enter for 'navn'.
  • Tryk på Enter for 'versionen'.
  • Til  'beskrivelse' skriver vi i dette selvstudium "Brug af Passport med Sequelize og MySQL" som en beskrivelse og trykker på Enter. Dette kan også være tomt.
  • For 'indgangspunkt (index.js)' skal du skrive server.js og trykke på Enter.
  • Tryk på Enter for 'testkommando'.
  • For 'git repository' kan du indtaste den git-repo, hvor din app ligger, hvis du har en eller bare trykke på Enter for at lade dette stå tomt.
  • Tryk på Enter for 'Søgeord'.
  • For 'forfatter' skal du trykke på Enter eller indtaste dit navn, før du gør det.
  • Tryk på Enter for at få 'licens'.
  • For '(Er dette okay )' viser dette dig, hvordan din package.json vil se ud. Skriv Ja, og tryk på Enter.

Trin 2:Installer afhængigheder

De største afhængigheder for denne øvelse er:

  • Express
  • Forfølgelse
  • MySQL
  • Pas
  • Lokal strategi for pas
  • Body Parser
  • Express-session
  • Bcrypt Nodejs
  • Express-styr for visningerne 

For at installere dem fra din terminal eller kommandoprompt, kør følgende en efter en.

npm install express --savenpm installer efterfølger --savenpm installer mysql --savenpm installer pas --savenpm installer passport-local --savenpm installer body-parser --savenpm installer express-session --savenpm installer bcrypt-nodejs - -savenpm installer express-styr --save

Hvis du bruger Git til dette projekt:

Opret en .gitignore-fil i din projektmappe.

Tilføj denne linje til .gitignore-filen.

node_modules

Trin 3:Konfigurer appen

Nu opretter vi en serverfil. Dette vil være hovedfilen, der kaldes, når du skriver følgende:

npm start

Dette kører appen. Du kan også køre appen ved at skrive node server.js.

node server.js

Derefter, i vores projektmappe, opretter vi en ny fil og navngiver denne fil server.js .

Inde i server.js fil, indsætter vi følgende:

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

Den første linje tildeler express-modulet til en variabel express. Vi initialiserer derefter express og kalder det en variabel:app.

Så får vi app til at lytte på port 5000 . Du kan vælge et hvilket som helst ledigt portnummer på din computer.

Dernæst kalder vi app.get() Express routing-funktion til at svare med "Velkommen til Passport with Sequelize", når en GET-anmodning sendes til "/".

For at teste på din computer skal du køre dette inde fra din projektmappe:

node server.js

Hvis du ser teksten "Velkommen til Passport with Sequelize", når du besøger http://localhost:5000/, så tillykke! Ellers skal du kontrollere, at du har gjort alt præcis som det er skrevet ovenfor.

Dernæst importerer vi nogle moduler, vi har brug for, f.eks. pas, ekspres-session og body-parser.

Efter var app = express() vi tilføjer følgende linjer:

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

I de første to linjer importerer vi pasmodulet og ekspres-sessionen, som vi begge skal håndtere godkendelse.

Derefter importerer vi body-parser-modulet. Dette udtrækker hele kropsdelen af ​​en indgående anmodning og eksponerer den i et format, der er lettere at arbejde med. I dette tilfælde vil vi bruge JSON-formatet.

For at lade vores app bruge body-parseren tilføjer vi disse linjer nogle mellemrum under importlinjerne:

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

Derefter initialiserer vi pas og ekspressessionen og passessionen og tilføjer dem begge som middleware. Vi gør dette ved at tilføje disse linjer nogle mellemrum efter bodyParser-importlinjen.

// For Passportapp.use(session({ secret:'keyboard cat',resave:true, saveUninitialized:true})); // session secretapp.use(passport.initialize());app.use(passport.session()); // vedvarende login-sessioner

Vi vil begynde at arbejde på den faktiske godkendelse nu.

Vi gør dette i fire trin:

  • Konfigurer Sequelize med MySQL.
  • Opret brugermodellen.
  • Konfigurer visninger.
  • Skriv en passtrategi.

1. Konfigurer Sequelize med MySQL

Først opretter vi en database i MySQL. Giv det dit foretrukne navn. Af hensyn til denne vejledning, lad os oprette en database ved navn sequelize_passport i MySQL.

Derefter opsætter vi konfigurationen til at håndtere DB-detaljer.

Lad os først importere dot-env-modulet for at håndtere miljøvariabler.

Kør dette i din rodprojektmappe :

npm install --save dotenv

Så importerer vi den i hovedserverfilen, server.js, lige under de andre importer.

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

Dernæst opretter vi en fil i vores projektmappe og navngiver den .env.

Dette næste trin at følge er valgfrit, hvis du ikke bruger Git:

Vi tilføjer .env-filen til din .gitignore-fil.

Din .gitignore-fil skulle se sådan ud:

node_modules.env

Herefter tilføjer vi vores miljø til .env-filen ved at tilføje denne linje:

NODE_ENV='development'

Derefter opretter vi en config.json-fil, som vil blive brugt af Sequelize til at administrere forskellige miljøer.

Den første ting at gøre er at oprette en mappe med navnet config i vores projektmappe. Inde i denne mappe opretter vi en config. json fil. Denne fil bør ignoreres, hvis du skubber til et lager. For at gøre dette skal du tilføje følgende kode til din .gitignore:

config/config.json

Derefter indsætter vi følgende kode i vores config.json-fil.

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

Husk at erstatte værdierne i udviklingsblokken ovenfor med dine databasegodkendelsesdetaljer.

Dernæst installerer vi sequelize med npm. For at gøre dette skal du køre følgende kommando i projektets rodmappe:

npm install --save sequelize

Nu er det tid til at skabe modellerne folder.

Først laver vi en mappe med navnet app i vores projektmappe.

Inde i appen  mappe, opretter vi en ny mappe med navnetmodeller og opret en ny fil med navnet index.jsmodellerne mappe.

Inde i index.js-filen indsætter vi koden nedenfor.

"brug streng";var fs =require("fs");var path =require("sti");var Sequelize =require("sequelize");var env =process.env.NODE_ENV || "udvikling";var config =require(path.join(__dirnavn, '..', 'config', 'config.json'))[env];var sequelize =new Sequelize(config.database, config.username, config .password, config);var db ={};fs .readdirSync(__dirname) .filter(funktion(fil) { return (file.indexOf(".") !==0) &&(fil !=="indeks. js"); }) .forEach(function(file) { var model =sequelize.import(path.join(__dirname, file)); db[model.name] =model; });Object.keys(db). forEach(function(modelName) { if ("associere" i db[modelName]) { db[modelName].associate(db); }});db.sequelize =sequelize;db.Sequelize =Sequelize;module.exports =db;

Denne fil bruges til at importere alle de modeller, vi placerer i modellerne mappe, og eksporter dem.

For at teste, at alt er godt, tilføjer vi dette i vores server.js-fil.

//Modelsvar models =require("./app/models");//Sync Databasemodels.sequelize.sync().then(function() { console.log('Dejligt! Databasen ser fin ud')}) .catch(function(err) { console.log(err, "Noget gik galt med databaseopdateringen!")});

Her importerer vi modellerne og kalder derefter funktionen Sequelize sync.

Kør dette for at se, om alt er godt:

node server.js

Hvis du får beskeden "Site er live Nice! Database ser fint ud", så har du opsat Sequelize.

Hvis ikke, så gå omhyggeligt igennem ovenstående trin og prøv at fejlfinde problemet med hjælp.

2. Opret brugermodellen

Det næste, vi skal gøre, er at oprette brugermodellen, som grundlæggende er brugertabellen. Dette vil indeholde grundlæggende brugeroplysninger.

I vores modeller mappe, opretter vi en fil og navngiver den user.js . Den fulde sti til denne fil skal være app/models/user.js.

Åbn filen user.js og tilføj følgende kode:

module.exports =function(sequelize, Sequelize) { var User =sequelize.define('user', { id:{ autoIncrement:true, primaryKey:true, type:Sequelize.INTEGER }, firstname:{ type:Sequelize .STRING, notEmpty:true }, efternavn:{ type:Sequelize.STRING, notEmpty:true }, brugernavn:{ type:Sequelize.TEXT }, om:{ type:Sequelize.TEXT }, e-mail:{ type:Sequelize.STRING , valider:{ isEmail:true } }, adgangskode:{ type:Sequelize.STRING, allowNull:false }, last_login:{ type:Sequelize.DATE }, status:{ type:Sequelize.ENUM('active', 'inactive' ), defaultValue:'aktiv' } }); returnere bruger;}

Kør nu:

node server.js

Du bør se den velkendte "Site er live. Dejligt! Database ser fint ud. "-meddelelse. Dette betyder, at vores Sequelize-modeller er blevet synkroniseret med succes, og hvis du tjekker din database, skulle du se en brugertabel med de angivne kolonner til stede.

3:Konfigurer visninger

Lad os først oprette visningen til tilmelding og tilslutte den.

Den første ting at gøre er at importere ekspresstyrmodulet, som vi bruger til visninger i denne øvelse.

Føj denne linje til hovedstartfilen, server.js.

var exphbs = require('express-handlebars')

Din importblok skulle se sådan ud på dette tidspunkt.

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

Dernæst tilføjer vi følgende linjer i vores server.js-fil.

//For Handlebarsapp.set('views', './app/views')app.engine('hbs', exphbs({ extname:'.hbs'}));app.set('view engine ', '.hbs');

Nu, i vores app-mappe, opretter vi tre mapper med navnet visninger, controllere, og ruter .

I visningsmappen opretter vi en fil med navnet tilmelding. hbs og indsæt koden nedenfor i den.

  
  1. Hvordan indsætter man værdier i tabel med fremmednøgle ved hjælp af MySQL?

  2. JDBC-tegnkodning

  3. Hvad er SQL? Hvad er en database? Relationelle databasestyringssystemer (RDBMS) forklaret på almindeligt engelsk.

  4. SQL LocalDB vs SQL Server CE