Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan Paspor Dengan Sequelize dan MySQL

Sequelize adalah ORM Node.js berbasis janji. Ini dapat digunakan dengan PostgreSQL, MySQL, MariaDB, SQLite, dan MSSQL. Dalam tutorial ini, kami akan menerapkan otentikasi untuk pengguna aplikasi web. Dan kami akan menggunakan Passport, middleware otentikasi populer untuk Node, bersama dengan Sequelize dan MySQL untuk mengimplementasikan pendaftaran dan login pengguna.

Memulai

Pastikan Anda menginstal yang berikut ini di mesin Anda:

  • Simpul
  • MySQL

Untuk tutorial ini, kita akan menggunakan Node.js bersama dengan Express, jadi kita lanjutkan dan mulai menginstal apa yang kita butuhkan.

Langkah 1:Buat File package.json

Buat direktori untuk aplikasi Anda. Di dalam direktori ini, jalankan ini dari terminal atau command prompt Anda:

npm init

Ini menginisialisasi Manajer Ketergantungan npm. Ini akan menampilkan serangkaian perintah yang akan segera kita lalui.

  • Ketik nama aplikasi Anda tanpa spasi dan tekan Enter untuk 'nama'.
  • Tekan Enter untuk 'versi'.
  • Untuk  'description', dalam tutorial ini, kita akan mengetik "Using Passport with Sequelize and MySQL" sebagai deskripsi dan tekan Enter. Ini juga bisa kosong.
  • Untuk 'titik masuk (index.js)', ketik server.js dan tekan Enter.
  • Untuk 'perintah uji', tekan Enter.
  • Untuk 'git repository', Anda dapat memasukkan git repo tempat aplikasi Anda berada jika Anda memilikinya atau cukup tekan Enter untuk mengosongkannya.
  • Untuk 'Kata Kunci', tekan Enter.
  • Untuk 'penulis', tekan Enter atau ketik nama Anda sebelum melakukannya.
  • Untuk 'lisensi', tekan Enter.
  • Untuk '(Is this okay )', ini menunjukkan seperti apa package.json Anda nantinya. Ketik Ya dan tekan Enter.

Langkah 2:Instal Dependensi

Dependensi utama untuk tutorial ini adalah:

  • Ekspres
  • Sekuel
  • MySQL
  • Paspor
  • Strategi Lokal Paspor
  • Pengurai Tubuh
  • Sesi Ekspres
  • Bcrypt Nodejs
  • Stang Ekspres untuk tampilan 

Untuk menginstalnya, dari terminal atau command prompt Anda, jalankan yang berikut ini satu per satu.

npm install express --savenpm install sequelize --savenpm install mysql --savenpm install passport --savenpm install passport-local --savenpm install body-parser --savenpm install express-session --savenpm install bcrypt-nodejs - -savenpm install express-handbars --save

Jika Anda menggunakan Git untuk proyek ini:

Di folder proyek Anda, buat file .gitignore.

Tambahkan baris ini ke file .gitignore.

node_modules

Langkah 3:Siapkan Aplikasi

Sekarang, kita membuat file server. Ini akan menjadi file utama yang dipanggil saat Anda mengetik berikut ini:

npm mulai

Ini menjalankan aplikasi. Anda juga dapat menjalankan aplikasi dengan mengetik node server.js.

server simpul.js

Kemudian, di folder proyek kami, kami membuat file baru dan beri nama file ini server.js .

Di dalam server.js file, kami menempelkan yang berikut:

var express =require('express');var app =express();app.get('/', function(req, res) { res.send('Selamat datang di Paspor dengan Sequelize');});app.listen(5000, function(err) { if (!err) console.log("Situs aktif"); else console.log(err)});

Baris pertama menetapkan modul ekspres ke variabel ekspres. Kami kemudian menginisialisasi express dan menamainya variabel:app.

Kemudian kami membuat aplikasi mendengarkan di port 5000 . Anda dapat memilih nomor port gratis di komputer Anda.

Selanjutnya, kita panggil app.get() fungsi perutean ekspres untuk merespons dengan "Selamat datang di Paspor dengan Sekuelisasi" ketika permintaan GET dibuat ke "/".

Untuk menguji di komputer Anda, jalankan ini dari dalam folder proyek Anda:

server simpul.js

Jika Anda melihat teks "Welcome to Passport with Sequelize" saat Anda mengunjungi http://localhost:5000/ maka selamat! Jika tidak, periksa apakah Anda telah melakukan semuanya persis seperti yang tertulis di atas.

Selanjutnya, kita mengimpor beberapa modul yang kita butuhkan, seperti paspor, sesi ekspres, dan body-parser.

Setelah var app = express() kita tambahkan baris berikut:

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

Di dua baris pertama, kita mengimpor modul paspor dan sesi ekspres, yang keduanya perlu kita tangani autentikasi.

Kemudian, kita mengimpor modul body-parser. Ini mengekstrak seluruh bagian tubuh dari permintaan yang masuk dan memaparkannya dalam format yang lebih mudah untuk dikerjakan. Dalam hal ini, kami akan menggunakan format JSON.

Agar aplikasi kita menggunakan body parser, kita tambahkan baris ini beberapa spasi di bawah baris impor:

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

Selanjutnya, kami menginisialisasi paspor dan sesi ekspres dan sesi paspor dan menambahkan keduanya sebagai middleware. Kami melakukan ini dengan menambahkan baris ini beberapa spasi setelah baris impor bodyParser.

// Untuk Passportapp.use(session({ secret:'keyboard cat',resave:true, saveUninitialized:true})); // sesi secretapp.use(passport.initialize());app.use(passport.session()); // sesi login persisten

Kami akan mulai mengerjakan autentikasi yang sebenarnya sekarang.

Kami akan melakukannya dalam empat langkah:

  • Siapkan Sequelize dengan MySQL.
  • Buat model pengguna.
  • Menyiapkan tampilan.
  • Tulis strategi paspor.

1. Mengatur Sekuel Dengan MySQL

Pertama, kita membuat Database di MySQL. Berikan nama pilihan Anda. Demi tutorial ini, mari kita buat database bernama sequelize_passport di MySQL.

Kemudian kami mengatur konfigurasi untuk menangani detail DB.

Pertama, mari impor modul dot-env untuk menangani variabel lingkungan.

Jalankan ini di folder proyek root Anda :

npm install --save dotenv

Kemudian kita mengimpornya di file server utama, server.js, tepat di bawah impor lainnya.

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

Selanjutnya, kami membuat file di folder proyek kami dan beri nama .env.

Langkah selanjutnya yang harus diikuti adalah opsional jika Anda tidak menggunakan Git:

Kami akan menambahkan file .env ke file .gitignore Anda.

File .gitignore Anda akan terlihat seperti ini:

node_modules.env

Setelah ini, kami menambahkan lingkungan kami ke file .env dengan menambahkan baris ini:

NODE_ENV='development'

Kemudian kita membuat file config.json yang akan digunakan oleh Sequelize untuk mengelola lingkungan yang berbeda.

Hal pertama yang harus dilakukan adalah membuat folder bernama config di folder proyek kami. Di dalam folder ini, kami membuat config. json mengajukan. File ini harus diabaikan jika Anda mendorong ke repositori. Untuk melakukannya, tambahkan kode berikut ke .gitignore Anda:

config/config.json

Kemudian, kita paste kode berikut di file config.json kita.

{ "pengembangan":{ "nama pengguna":"root", "password":null, "database":"sequelize_passport", "host":"127.0.0.1", "dialek":"mysql" }, "test":{ "username":"", "password":null, "database":"", "host":"", "dialect":"mysql" }, "production":{ "nama pengguna":"", "password":null, "database":"", "host":"127.0.0.1", "dialect":"mysql" }}

Ingatlah untuk mengganti nilai di blok pengembangan di atas dengan detail otentikasi basis data Anda.

Selanjutnya, kami menginstal sekuel dengan npm. Untuk melakukannya, jalankan perintah berikut di folder root proyek:

npm install --save sequelize

Sekarang saatnya membuat model map.

Pertama, kita buat direktori bernama app di folder proyek kami.

Di dalam aplikasi  folder, kami membuat folder baru bernama model dan buat file baru bernama index.js di model folder.

Di dalam file index.js, kita paste kode di bawah ini.

"gunakan ketat";var fs =require("fs");var path =require("path");var Sequelize =require("sequelize");var env =process.env.NODE_ENV || "pengembangan";var config =require(path.join(__dirname, '..', 'config', 'config.json'))[env];var sekuel =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" di db[modelName]) { db[modelName].associate(db); }});db.sequelize =sekuel;db.Sequelize =Sequelize;module.exports =db;

File ini digunakan untuk mengimpor semua model yang kita tempatkan di model folder, dan mengekspornya.

Untuk menguji apakah semuanya baik-baik saja, kami menambahkan ini di file server.js kami.

//Modelsvar models =require("./app/models");//Sync Databasemodels.sequelize.sync().then(function() { console.log('Bagus! Database terlihat bagus')}) .catch(function(err) { console.log(err, "Ada yang salah dengan Pembaruan Basis Data!")});

Di sini, kita mengimpor model, lalu memanggil fungsi sinkronisasi Sequelize.

Jalankan ini untuk melihat apakah semuanya baik-baik saja:

server simpul.js

Jika Anda mendapatkan pesan "Situs aktif Bagus! Basis data terlihat baik-baik saja", berarti Anda telah berhasil menyiapkan Sequelize.

Jika tidak, harap ikuti langkah-langkah di atas dengan hati-hati dan coba men-debug masalah dengan bantuan.

2. Buat Model Pengguna

Hal berikutnya yang akan kita lakukan adalah membuat model pengguna, yang pada dasarnya adalah tabel pengguna. Ini akan berisi informasi pengguna dasar.

Dalam model kami folder, kita buat file dan beri nama user.js . Jalur lengkap untuk file ini harus app/models/user.js.

Buka file user.js dan tambahkan kode berikut:

module.exports =function(sequelize, Sequelize) { var User =sequelize.define('user', { id:{ autoIncrement:true, primaryKey:true, type:Sequelize.INTEGER }, firstname:{ type:Sequelize .STRING, notEmpty:true }, lastname:{ type:Sequelize.STRING, notEmpty:true }, username:{ type:Sequelize.TEXT }, about:{ type:Sequelize.TEXT }, email:{ type:Sequelize.STRING , validasi:{ isEmail:true } }, kata sandi:{ type:Sequelize.STRING, allowNull:false }, last_login:{ type:Sequelize.DATE }, status:{ type:Sequelize.ENUM('active', 'inactive' ), defaultValue:'aktif' } }); kembali Pengguna;}

Sekarang jalankan:

server simpul.js

Anda akan melihat "Situs sudah aktif. Bagus! Basis Data terlihat baik-baik saja. " pesan. Ini berarti bahwa model Sequelize kami telah berhasil disinkronkan, dan jika Anda memeriksa database Anda, Anda akan melihat tabel pengguna dengan kolom yang ditentukan ada.

3:Mengatur Tampilan

Pertama, mari buat tampilan untuk pendaftaran dan hubungkan.

Hal pertama yang harus dilakukan adalah mengimpor modul setang ekspres yang kita gunakan untuk tampilan dalam tutorial ini.

Tambahkan baris ini ke file awal utama, server.js.

var exphbs = require('express-handlebars')

Blok impor Anda akan terlihat seperti ini pada saat ini.

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

Selanjutnya, kita tambahkan baris berikut di file server.js kita.

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

Sekarang, di folder aplikasi kami, kami membuat tiga folder bernama tampilan, pengontrol, dan rute .

Di folder views, kami membuat file bernama signup. hbs dan paste kode di bawah ini di dalamnya.

  

Kemudian di pengendali folder, kita buat file baru dan beri nama authcontroller.js.

Dalam file ini, kami menempelkan pengontrol berikut untuk rute pendaftaran yang akan kami buat sebentar lagi.

var export =module.exports ={}exports.signup =function(req, res) { res.render('signup');}

Selanjutnya, kami membuat rute untuk mendaftar. Di folder rute, kami membuat file baru bernama auth.js  lalu, dalam file ini, kami mengimpor pengontrol auth dan menentukan rute pendaftaran.

var authController =require('../controllers/authcontroller.js');module.exports =function(app) { app.get('/signup', authController.signup);}

Sekarang, kita akan mengimpor rute ini di server.js kita dan meneruskan aplikasi sebagai argumen.

Di server, setelah model diimpor, tambahkan baris ini:

//Routesvar authRoute =require('./app/routes/auth.js')(app);

Jalankan ini: 

server simpul.js

Sekarang, kunjungi http://localhost:5000/signup dan Anda akan melihat formulir pendaftaran.

Mari kita ulangi langkah-langkah untuk formulir masuk. Seperti sebelumnya, kita akan membuat file bernama signin.hbs di folder tampilan kami dan rekatkan kode HTML berikut di dalamnya:

  

Kemudian, tambahkan pengontrol untuk proses masuk di app/controllers/authcontroller.js.

exports.signin =function(req, res) { res.render('signin');}

Kemudian di app/routes/auth.js , kami menambahkan rute untuk masuk seperti ini:

app.get('/signin', authController.signin);

Sekarang ketika Anda menjalankan:

 node server.js 

dan kunjungi http://localhost:5000/signin/, Anda akan melihat formulir masuk.

Langkah terakhir dan utama adalah menulis strategi paspor kami.

4. Tulis Strategi Paspor

Di aplikasi/config , kami membuat folder baru bernama paspor.

Kemudian di folder baru kami app/config/passport, kami membuat file baru dan beri nama passport.js . File ini akan berisi strategi paspor kami.

Di passport.js , kami akan menggunakan model pengguna dan paspor.

Pertama, kita impor bcrypt yang kita butuhkan untuk mengamankan kata sandi.

var bCrypt = require('bcrypt-nodejs');

Kemudian, kita tambahkan blok module.exports seperti ini:

module.exports =function(paspor, pengguna) {}

Di dalam blok ini, kami menginisialisasi strategi paspor-lokal, dan model pengguna, yang akan diteruskan sebagai argumen. Inilah cara kami melakukannya:

module.exports =function(paspor, pengguna) { var Pengguna =pengguna; var LocalStrategy =require('passport-local').Strategy;}

Kemudian kami mendefinisikan strategi khusus kami dengan contoh LocalStrategy kami seperti ini:

passport.use('local-signup', new LocalStrategy( { usernameField:'email', passwordField:'password', passReqToCallback:true // memungkinkan kita untuk mengirimkan kembali seluruh permintaan ke callback },)); 

Sekarang kami telah menyatakan permintaan apa (req ) bidang usernameField dan passwordField (variabel paspor) kami.

Variabel terakhir passReqToCallback memungkinkan kita meneruskan seluruh permintaan ke callback, yang sangat berguna untuk mendaftar.

Setelah koma terakhir, kami menambahkan fungsi panggilan balik ini.

 function(req, email, password, done) {}

Dalam fungsi ini, kami akan menangani penyimpanan detail pengguna.

Pertama, kami menambahkan fungsi penghasil kata sandi hash di dalam fungsi panggilan balik.

 var generateHash =function(password) { return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null); };

Kemudian, menggunakan model pengguna Sequelize yang kami inisialisasi sebelumnya sebagai Pengguna , kami memeriksa apakah pengguna sudah ada, dan jika belum, kami menambahkannya.

User.findOne({ where:{ email:email }}).then(function(user) { if (user) { return done(null, false, { pesan:'Email itu sudah diambil' }); } else { var userPassword =generateHash(password); var data ={ email:email, password:userPassword, firstname:req.body.firstname, lastname:req.body.lastname }; User.create(data).then(fungsi (Pengguna baru, dibuat) { if (!Pengguna baru) { return done(null, false); } if (newUser) { return done(null, newUser); } }); }});

User.create() adalah metode Sequelize untuk menambahkan entri baru ke database. Perhatikan bahwa nilai dalam data objek diperoleh dari req.body objek yang berisi input dari formulir pendaftaran kami.

paspor.js Your Anda akan terlihat seperti ini:

//load bcryptvar bCrypt =require('bcrypt-nodejs');module.exports =function(paspor, pengguna) { var Pengguna =pengguna; var LocalStrategy =membutuhkan('paspor-lokal').Strategi; passport.use('local-signup', new LocalStrategy( { usernameField:'email', passwordField:'password', passReqToCallback:true // memungkinkan kita untuk mengirimkan kembali seluruh permintaan ke callback }, function(req, email, password, selesai) { var generateHash =function(password) { return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null); }; User.findOne({ where:{ email:email } }).then(function (pengguna) { if (pengguna) { return done(null, false, { pesan:'Email itu sudah diambil' }); } else { var userPassword =generateHash(password); var data ={ email:email, kata sandi:kata sandi pengguna, nama depan:req.body.nama depan, nama belakang:req.body.nama belakang }; Pengguna.buat(data).lalu(fungsi(Pengguna baru, dibuat) { if (!Pengguna baru) { return done(null, false); } if (newUser) { return done(null, newUser); } }); } }); } ));}

Sekarang kita akan mengimpor strategi di server.js.

Untuk melakukan ini, kami menambahkan baris ini di bawah impor rute di server.js.

//load passport strategyrequire('./app/config/passport/passport.js')(passport, models.user);

Server.js Anda akan terlihat seperti ini saat ini:

var express =require('express')var app =express()var passport =require('passport')var session =require('express-session')var bodyParser =require('body-parser')var env =require('dotenv').load()var exphbs =require('express-handbars')//For BodyParserapp.use(bodyParser.urlencoded({ extended:true}));app.use(bodyParser.json( ));// Untuk Passportapp.use(session({ secret:'keyboard cat', resave:true, saveUninitialized:true})); // sesi secretapp.use(passport.initialize());app.use(passport.session()); // sesi login persisten//Untuk Handlebarsapp.set('views', './app/views')app.engine('hbs', exphbs({ extname:'.hbs'}));app.set(' view engine', '.hbs');app.get('/', function(req, res) { res.send('Selamat datang di Passport with Sequelize');});//Modelsvar models =require(". /app/models");//Routesvar authRoute =require('./app/routes/auth.js')(app);//load passport strategyrequire('./app/config/passport/passport.js') (paspor, model.pengguna);//Sync Databasemodels.sequelize.sync().then(function() { console.log('Bagus! Database terlihat bagus')}).catch(function(err) { console.log (err, "Ada yang tidak beres dengan Pembaruan Basis Data!")});app.listen(5000, function(err) { if (!err) console.log("Situs aktif"); else console.log(err )});

Sekarang kita akan benar-benar menerapkan strategi ke /signup our rute.

Inilah cara kami melakukannya:

Pertama, kita buka app/routes/auth.js , dan tambahkan rute pengeposan untuk mendaftar seperti ini.

app.post('/signup', passport.authenticate('local-signup', { successRedirect:'/dashboard', failureRedirect:'/signup' }));

Karena kami membutuhkan paspor, kami harus meneruskannya ke metode ini. Kami dapat mengimpor paspor dalam skrip ini atau meneruskannya dari server.js. Mari kita lakukan yang terakhir.

Ubah fungsi yang diekspor dalam file ini app/routes/auth.js memiliki paspor sebagai parameter. Kode di app/routes/auth.js akan terlihat seperti ini setelah Anda modifikasi.

var authController =require('../controllers/authcontroller.js');module.exports =function(app, paspor) { app.get('/signup', authController.signup); app.get('/signin', authController.signin); app.post('/signup', passport.authenticate('local-signup', { successRedirect:'/dashboard', failureRedirect:'/signup' } ));}

Kemudian di server.js , kami memodifikasi impor rute dan menambahkan paspor sebagai argumen seperti ini:

var authRoute = require('./app/routes/auth.js')(app,passport);

Sekarang, buka URL pendaftaran http://localhost:5000/signup/ dan coba daftar.

Saat Anda mencoba mendaftar, Anda akan mendapatkan pesan kesalahan "Gagal membuat serial pengguna ke dalam sesi ". Ini karena paspor harus menyimpan ID pengguna dalam sesi, dan menggunakan ini untuk mengelola pengambilan detail pengguna saat dibutuhkan.

Untuk mengatasi ini, kami akan mengimplementasikan fungsi serialize dan deserialize paspor di app/config/passport/passport.js kami berkas.

Pertama kita tambahkan fungsi serialize. Dalam fungsi ini, kita akan menyimpan user id ke sesi.

Untuk melakukannya, kami menambahkan baris berikut di bawah inisialisasi strategi lokal.

//serializepassport.serializeUser(function(user, done) { done(null, user.id);});

Selanjutnya, kami mengimplementasikan fungsi deserialize. Tambahkan fungsi tepat di bawah fungsi serialisasi.

// deserialize user passport.deserializeUser(function(id, done) { User.findById(id).then(function(user) { if (user) { done(null, user.get()); } else { done(user.errors, null); } });});

Pada fungsi deserialize di atas, kita menggunakan Sequelize findById berjanji untuk mendapatkan pengguna, dan jika berhasil, sebuah instance dari model Sequelize dikembalikan. Untuk mendapatkan objek User dari instance ini, kita menggunakan fungsi Sequelize getter seperti ini:user.get() .

Sekarang jalankan lagi:

server simpul.js

Dan mencoba untuk mendaftar. Hore jika Anda mendapatkan "Tidak bisa GET /dasbor"! Itu berarti otentikasi kami berhasil. Ingat kami dialihkan ke /dashboard dalam metode passport.authenticate kami di routes/auth.js .

Sekarang mari kita lanjutkan dan tambahkan rute itu. Kemudian, tambahkan middleware untuk memastikan halaman hanya dapat diakses saat pengguna masuk ke sesi.

Di aplikasi/tampilan kami folder, kami membuat file baru bernama dashboard.hbs dan tambahkan kode HTML berikut di dalamnya.

 Paspor dengan Sequelize 

Dasbor

Hore! Anda telah masuk.

Di routes/auth.js , kami menambahkan baris ini di dalam module.exports blok:

app.get('/dashboard',authController.dashboard);

Selanjutnya, kita pergi ke app/controllers/authController.js dan tambahkan pengontrol dasbor.

exports.dashboard =function(req, res) { res.render('dashboard');}

AuthController.js Anda akan terlihat seperti ini:

var export =module.exports ={}exports.signup =function(req, res) { res.render('signup');}exports.signin =function(req, res) { res.render('signin ');}exports.dashboard =function(req, res) { res.render('dashboard');}

Sekarang, jalankan aplikasi lagi, dan coba mendaftar dengan alamat email yang berbeda dari yang Anda gunakan sebelumnya. Anda akan dialihkan dengan tepat ke /dasbor rute.

Tapi /dasbor bukan rute yang dilindungi, yang berarti meskipun pengguna tidak masuk, mereka dapat melihatnya. Kami tidak menginginkan ini, jadi kami akan menambahkan /logout route untuk mengeluarkan pengguna, lalu melindungi rute dan menguji apa yang telah kita lakukan.

Ayo lakukan ini:

Di routes/auth.js kita tambahkan baris ini:

app.get('/logout',authController.logout);

Kemudian kami menambahkan pengontrol di app/controllers/authController.js.

 export.logout =function(req, res) { req.session.destroy(function(err) { res.redirect('/'); }); }

Sekarang jalankan aplikasi lagi dan daftar dengan alamat email yang berbeda.

Setelah itu, kunjungi http://localhost:5000/logout untuk mengeluarkan pengguna. Sekarang kunjungi http://localhost:5000/dashboard.

Anda akan melihat bahwa itu cukup mudah diakses. Mari tambahkan middleware khusus untuk melindungi rute tersebut.

Untuk melakukan ini, kami membuka app/routes/auth.js dan tambahkan fungsi ini di module.exports blok, di bawah semua baris kode lainnya.

function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/signin');}

Kemudian kita modifikasi dashboard route handler agar terlihat seperti ini:

app.get('/dashboard',isLoggedIn, authController.dashboard);

Sekarang ketika Anda menjalankan aplikasi lagi dan mencoba mengunjungi halaman dasbor dan Anda tidak masuk, Anda harus diarahkan ke halaman masuk.

Wah! Saatnya untuk mengimplementasikan bagian terakhir:sign-in.

Pertama, kami akan menambahkan strategi lokal baru untuk masuk di app/config/passport/passport.js .

//LOCAL SIGNINpassport.use('local-signin', new LocalStrategy( { // secara default, strategi lokal menggunakan username dan password, kami akan menimpa dengan email usernameField:'email', passwordField:'password', passReqToCallback :true // memungkinkan kita untuk mengembalikan seluruh permintaan ke callback }, function(req, email, password, done) { var User =user; var isValidPassword =function(userpass, password) { return bCrypt.compareSync(password, userpass); } User.findOne({ where:{ email:email } }).then(function(user) { if (!user) { return done(null, false, { pesan:'Email tidak ada' }); } if (!isValidPassword(user.password, password)) { kembali selesai(null, false, { pesan:'Sandi salah.' }); } var userinfo =pengguna. Dapatkan(); kembali selesai (null, info pengguna); }).catch(function(err) { console.log("Error:", err); return done(null, false, { pesan:'Ada yang salah dengan Login Anda' }); }); }));

Dalam strategi ini, isValidPassword fungsi membandingkan kata sandi yang dimasukkan dengan metode perbandingan bCrypt karena kami menyimpan kata sandi kami dengan bcrypt .

Jika detailnya benar, pengguna kami akan masuk.

Sekarang buka routes/auth.js dan tambahkan rute untuk memposting ke / masuk.

app.post('/signin', passport.authenticate('local-signin', { successRedirect:'/dashboard', failureRedirect:'/signin' }));

Route/auth.js Anda akan terlihat seperti ini setelah selesai.

var authController =require('../controllers/authcontroller.js');module.exports =function(app, paspor) { app.get('/signup', authController.signup); app.get('/signin', authController.signin); app.post('/signup', passport.authenticate('local-signup', { successRedirect:'/dashboard', failureRedirect:'/signup' } )); app.get('/dashboard', isLoggedIn, authController.dashboard); app.get('/logout', authController.logout); app.post('/signin', passport.authenticate('local-signin', { successRedirect:'/dashboard', failureRedirect:'/signin' } )); function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/masuk'); }}

Sekarang jalankan aplikasi dan coba masuk. Anda seharusnya dapat masuk dengan semua detail yang Anda gunakan saat mendaftar, dan Anda akan diarahkan ke http ://localhost:5000/dashboard/.

Selamat jika Anda berhasil mencapai akhir tutorial ini! Kami telah berhasil menggunakan Sequelize dan Passport dengan database MySQL.

Kode lengkap untuk tutorial ini dapat ditemukan di GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Terapkan Database MySQL Cloud Hybrid menggunakan ClusterControl

  2. perlu mengembalikan dua set data dengan dua klausa where yang berbeda

  3. Cara Mendapatkan Catatan Bulan Ini di MySQL

  4. Apakah mungkin untuk GROUP BY beberapa kolom menggunakan MySQL?

  5. Menggunakan Paspor Dengan Sequelize dan MySQL