Sequelize adalah node.js Orm berasaskan janji. Ia boleh digunakan dengan PostgreSQL, MySQL, MariaDB, SQLite, dan MSSQL. Dalam tutorial ini, kami akan melaksanakan pengesahan untuk pengguna aplikasi web. Dan kami akan menggunakan pasport, middleware pengesahan popular untuk nod, bersama -sama dengan Sequelize dan MySQL, untuk melaksanakan pendaftaran pengguna dan log masuk.
Pastikan anda memasang berikut di mesin anda:
Untuk tutorial ini, kami akan menggunakan node.js dan rangka kerja Express, jadi kami teruskan dan mula memasang apa yang kami perlukan.
Buat direktori untuk aplikasi anda. Di dalam direktori ini, jalankan ini dari terminal atau arahan arahan anda:
NPM INIT<br>
Ini memulakan Pengurus Ketergantungan NPM. Ini akan membentangkan satu siri arahan yang akan kami lalui dengan cepat.
Kebergantungan utama untuk tutorial ini adalah:
Untuk memasangnya, dari terminal atau command prompt anda, jalankan satu demi satu demi satu.
NPM Pemasangan Express -Save<br> NPM Pasang Sequelize - -Save<br> NPM Pasang Sequelize - -Save<br> NPM Pasang MySQL -Save<br> NPM Pemasangan Pasport -Save<br> NPM Pemasangan Pasport-Local-Save<br> NPM Pasang Sesi Ekspres-Save<br> NPM Pasang Bcryptjs - -Save<br> NPM Pasang Handlebars Express-Save<br> NPM Pasang MySQL2 -Save<br>
Jika anda menggunakan Git untuk projek ini, buat ekspres. Kami kemudian memulakan Express dan kemudian memberikannya kepada modul pasport yang berubah -ubah dan pasport dan model. Fungsi penyegerakan. Jalankan ini untuk melihat sama ada semuanya baik:
node server.js<br>
Jika anda mendapat mesej " Laman Live. Bagus! Pangkalan data kelihatan baik ", maka anda telah menyediakan sekuel dengan jayanya.
Jika tidak, sila pergi dengan teliti di atas langkah -langkah di atas dan cuba debug isu dengan bantuan.
Perkara seterusnya yang akan kita lakukan ialah membuat model pengguna, yang pada dasarnya adalah jadual pengguna. Ini akan mengandungi maklumat pengguna asas.
Dalam folder Model kami, kami membuat fail dan namakannya user.js. Laluan penuh untuk fail ini mestilah aplikasi/model/user.js .
Buka fail user.js dan tambahkan kod berikut:
modul.exports = fungsi (sequelize, sequelize) {<br> var user = sequelize.define ('user', {<br> id: {<br> Autoincrement: Benar,<br> PRIMAKEKE: Benar,<br> Jenis: Sequelize.Integer<br> },<br> Name First: {<br> Jenis: Sequelize.String,<br> Notempty: Benar<br> },<br> LastName: {<br> Jenis: Sequelize.String,<br> Notempty: Benar<br> },<br> Nama pengguna: {<br> Jenis: Sequelize.Text<br> },<br> Mengenai: {<br> Jenis: Sequelize.Text<br> },<br> E -mel: {<br> Jenis: Sequelize.String,<br> validate: {<br> Isemail: Benar<br> }<br> },<br> Kata Laluan: {<br> Jenis: Sequelize.String,<br> Allownull: Salah<br> },<br> last_login: {<br> jenis: sequelize.date<br> },<br> Status: {<br> Jenis: sequelize.enum ('aktif', 'tidak aktif'),<br> DefaultValue: 'Aktif'<br> }<br> });<br> Pengguna pulangan;<br> }<br>
Sekarang lari:
node server.js<br>
Anda harus melihat " laman web yang biasa. Bagus! Pangkalan data kelihatan baik " mesej. Ini bermakna model Sequelize kami telah disegerakkan dengan jayanya, dan jika anda menyemak pangkalan data anda, anda harus melihat jadual pengguna dengan lajur yang ditentukan.
Dalam bahagian ini, kami akan menubuhkan pandangan untuk pihak klien. Pertama, mari kita buat pandangan untuk mendaftar dan mengikatnya.
Perkara pertama yang perlu dilakukan ialah mengimport fail AuthController dan menentukan laluan pendaftaran.
var authController = memerlukan ('../ Controllers/AuthController.js');<br> modul.exports = fungsi (app) {<br> app.get ('/signup', authController.signup);<br> };<br>
Sekarang, kami akan mengimport laluan ini di server.js kami dan lulus aplikasinya sebagai hujah. Dalam server.js , selepas model import, tambahkan baris ini:
// Laluan<br> var authRoute = memerlukan ('./ App/Routes/Auth.js') (App);<br>
Jalankan ini:
node server.js<br>
Sekarang, lawati http: // localhost: 5000/pendaftaran, dan anda akan melihat borang pendaftaran.
Mari kita ulangi langkah-langkah untuk borang log masuk. Seperti dahulu, kami akan membuat fail bernama Signin.HBS dalam folder pandangan kami dan tampal kod HTML berikut di dalamnya:
<br> <br> <br> <tirtment> Log masuk susun atur <br> <link rel="stylesheet" href="/styles.css"> <br> <br> <br> <h2> Pasport dengan Sequelize dan MySQL </h2> <br> <form id="signin" name="signin" method="post" action="signin"> <br> <label untuk="e -mel"> Alamat e -mel </label><br> <input class="text" name="email" type="text"><br> <label untuk="kata laluan"> kata laluan </label><br> <input name="kata laluan" type="password"><br> <input class="btn" type="hantar" value="log masuk"><br> </form> <br> <br> <br></tirtment>
Kemudian, tambahkan pengawal untuk log masuk dalam APP/Controllers/AuthController.js .
eksports.signin = fungsi (req, res) {<br> res.render ('signin');<br> };<br>
Kemudian, dalam aplikasi/laluan/auth.js , kami menambah laluan untuk log masuk seperti ini:
bcryptjs, yang kita perlukan untuk mendapatkan kata laluan.
Module.exports blok seperti ini:
modul.exports = fungsi (pasport, pengguna) {<br> }<br>
Di dalam blok ini, kami memulakan strategi tempatan seperti ini:
Pasport.use ('Local-Signup', New LocalStrategy (<br> {<br> Usernamefield: 'E -mel',<br> Kata Laluan: 'Kata Laluan',<br> Passreqtocallback: benar // membolehkan kami menghantar kembali permintaan keseluruhan ke panggilan balik<br> },<br> )))<br>
Sekarang kami telah mengisytiharkan medan permintaan kami kata laluan kami (pembolehubah pasport) kami.
Pengguna pembolehubah terakhir, kami periksa untuk melihat sama ada pengguna sudah wujud, dan jika tidak, kami menambahnya.
User.findone ({<br> di mana: {<br> E -mel: E -mel<br> }<br> }). Kemudian (fungsi (pengguna) {<br> jika (pengguna)<br> {<br> kembali selesai (null, palsu, {<br> Mesej: 'E -mel itu sudah diambil'<br> });<br> } lain<br> {<br> var userPassword = GenerateHash (kata laluan);<br> var data =<br> {<br> E -mel: E -mel,<br> Kata Laluan: UserPassword,<br> Name FirstName: req.body.firstname,<br> lastname: req.body.lastname<br> };<br> User.Create (data) .then (fungsi (newUser, dicipta) {<br> jika (! newuser) {<br> pulangan selesai (null, palsu);<br> }<br> jika (newUser) {<br> kembali selesai (Null, Newuser);<br> }<br> });<br> }<br> });<br>
objek req.body, yang mengandungi input dari borang pendaftaran kami.
Laluan anda import .
// Strategi pasport beban<br> memerlukan ('./ app/config/passport/passport.js') (pasport, model.user);<br>
Server.js anda sekarang kelihatan seperti ini:
var express = memerlukan ('ekspres');
var app = express ();
var pasport = memerlukan ('pasport');
var sesi = memerlukan ('ekspres-sesi');
var env = memerlukan ('dotenv'). config ();
var exphbs = memerlukan ('express-handlebars');
app.use (Express.Urlencoded ({
dilanjutkan: Benar
})
);
app.use (express.json ());
// untuk pasport
app.use (sesi ({
Rahsia: 'Kucing Papan Kekunci',
resave: benar,
SaveUnitialized: Benar
})); // Rahsia Sesi
app.use (pasport.initialize ());
app.use (pasport.Session ()); // sesi log masuk yang berterusan
// untuk hendal
app.set ('views', './app/views');
app.engine ('hbs', exphbs.engine ({
extname: '.hbs',
defaultlayout: palsu,
Layoutsdir: "Pandangan/susun atur/"
}));
app.set ('View Engine', '.hbs');
app.get ('/', fungsi (req, res) {
res.send ('Selamat datang ke Pasport dengan Sequelize');
});
// model
Model var = memerlukan ("./ App/Model");
// Laluan<br> var authRoute = memerlukan ('./ App/Routes/Auth.js') (App);<br> // Strategi pasport beban<br> memerlukan ('./ app/config/passport/passport.js') (pasport, model.user);<br> // Pangkalan data penyegerakan
Model.Sequelize.sync (). Kemudian (fungsi () {
Console.log ('Nice! Pangkalan data kelihatan baik');
}). tangkapan (fungsi (err) {
Console.log (err, "Sesuatu yang tidak kena dengan kemas kini pangkalan data!");
});
app.listen (5000, fungsi (err) {
jika (! err)
console.log ("tapak hidup");
lain console.log (err);
});
Sekarang kita sebenarnya akan menggunakan strategi ke laluan /pendaftaran kami. Inilah cara kita melakukannya:
Pertama, kami pergi ke aplikasi/laluan/auth.js dan tambahkan laluan untuk menghantar ke pendaftaran seperti ini.
app.post ('/pendaftaran', pasport.authenticate ('local-signup', {<br> SuckanceRect: '/Dashboard',<br> Failureredirect: '/Daftar'<br> }<br> ));<br>
Oleh kerana kita memerlukan pasport, kita perlu menyampaikannya kepada kaedah ini. Kami boleh mengimport pasport dalam skrip ini atau lulus dari server.js. Mari buat yang terakhir.
Ubah suai fungsi yang dieksport dalam aplikasi/laluan fail/auth.js ini mempunyai pasport sebagai parameter. Kod dalam aplikasi/laluan/auth.js sepatutnya kelihatan seperti ini selepas pengubahsuaian anda.
var authController = memerlukan ('../ Controllers/AuthController.js');
modul.exports = fungsi (app, pasport) {
app.get ('/signup', authController.signup);
app.get ('/signin', authController.signin);
app.post ('/pendaftaran', pasport.authenticate ('local-signup', {<br> SuckanceRect: '/Dashboard',<br> Failureredirect: '/Daftar'<br> }<br> ));<br> };
Kemudian, dalam server.js , kami mengubah suai blok modul.exports, di bawah semua baris kod lain.
fungsi isloggedIn (req, res, seterusnya) {<br> jika (req.isAuthenticated ())<br><br> kembali seterusnya ();<br><br> res.Redirect ('/signin');<br> }<br>
Kemudian kami mengubah suai pengendali laluan papan pemuka untuk kelihatan seperti ini:
app.get ('/Dashboard', isloggedIn, authController.dashboard);<br>
Sekarang, apabila anda menjalankan aplikasi sekali lagi dan cuba melawat halaman Dashboard dan anda tidak log masuk, anda harus diarahkan ke halaman log masuk.
Wah! Sudah tiba masanya untuk melaksanakan bahagian akhir: log masuk.
Pertama, kami akan menambah strategi tempatan baru untuk log masuk dalam aplikasi/konfigurasi/pasport/pasport.js .
// Signin Tempatan<br> Pasport.use ('Local-Signin', New LocalStrategy (<br> {<br> // Secara lalai, strategi tempatan menggunakan nama pengguna dan kata laluan, kami akan mengatasi e -mel<br> Usernamefield: 'E -mel',<br> Kata Laluan: 'Kata Laluan',<br> Passreqtocallback: benar // membolehkan kami menghantar kembali permintaan keseluruhan ke panggilan balik<br> },<br> fungsi (req, e -mel, kata laluan, selesai) {<br> var user = user;<br> var isvalidpassword = function (userPass, kata laluan) {<br> kembali bcrypt.comPareSync (kata laluan, userPass);<br> }<br> User.findone ({<br> di mana: {<br> E -mel: E -mel<br> }<br> }). Kemudian (fungsi (pengguna) {<br> jika (! pengguna) {<br> kembali selesai (null, palsu, {<br> Mesej: 'E -mel tidak wujud'<br> });<br> }<br> jika (! isvalidPassword (user.password, kata laluan)) {<br> kembali selesai (null, palsu, {<br> Mesej: 'Kata Laluan yang Tidak Betul.'<br> });<br> }<br> var userInfo = user.get ();<br> pulangan selesai (null, userInfo);<br> }). tangkapan (fungsi (err) {<br> Console.log ("Ralat:", Err);<br> kembali selesai (null, palsu, {<br> Mesej: 'Ada yang tidak kena dengan tanda anda'<br> });<br> });<br> }<br> ));<br>
Dalam strategi ini, isValidPassword
Fungsi membandingkan kata laluan yang dimasukkan dengan kaedah perbandingan bcrypt sejak kami menyimpan kata laluan kami dengan BCRYPT . Jika butirannya betul, pengguna kami akan ditandatangani.
Sekarang, pergi ke Routes /Auth.js dan tambahkan laluan untuk menghantar ke /signin .
app.post ('/signin', pasport.authenticate ('local-signin', {<br> SuckanceRect: '/Dashboard',<br> Failureredirect: '/signin'<br> }<br> ));<br>
Laluan anda/auth.js sepatutnya kelihatan seperti ini apabila anda selesai.
var authController = memerlukan ('../ Controllers/AuthController.js');
modul.exports = fungsi (app, pasport) {
app.get ('/signup', authController.signup);
app.get ('/signin', authController.signin);
app.post ('/pendaftaran', pasport.authenticate ('local-signup', {<br> SuckanceRect: '/Dashboard',<br> Failureredirect: '/Daftar'<br> }<br> ));<br> app.get ('/Dashboard', isloggedIn, authController.dashboard);<br> app.get ('/logout', authController.logout);
app.post ('/signin', pasport.authenticate ('local-signin', {<br> SuckanceRect: '/Dashboard',<br> Failureredirect: '/signin'<br> }<br> ));<br> fungsi isloggedIn (req, res, seterusnya) {
jika (req.isAuthenticated ())
kembali seterusnya ();
res.Redirect ('/signin');
}
}
Sekarang jalankan aplikasinya dan cuba masuk. Anda sepatutnya dapat log masuk dengan mana -mana butiran yang anda gunakan semasa mendaftar, dan anda akan diarahkan ke http: // localhost: 5000/dashboard/ .
Tahniah jika anda membuatnya hingga akhir tutorial ini! Kami telah berjaya menggunakan sekuel dan pasport dengan pangkalan data MySQL.
Untuk menjadikan permohonan kami lebih menarik, kami akan menambah sedikit gaya CSS. Kod untuk gaya dan kod penuh untuk tutorial ini boleh didapati di GitHub.
Ini menyimpulkan tutorial kami menggunakan pasport untuk pengesahan pengguna dengan Sequelize dan MySQL. Sequelize adalah ORM yang sangat berguna untuk berurusan dengan MySQL apabila menggunakan nod. Saya secara peribadi mendapati ia sangat berguna, dan anda pasti harus mempertimbangkan menggunakannya dalam aplikasi Node-Mysql seterusnya.
Siaran ini telah dikemas kini dengan sumbangan dari Mary Okosun. Mary adalah pemaju perisian yang berpangkalan di Lagos, Nigeria, dengan kepakaran dalam Node.js, JavaScript, MySQL, dan NoSQL Technologies.
Atas ialah kandungan terperinci Menggunakan pasport dengan sekuel dan mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!