Maison >interface Web >js tutoriel >Authentification locale utilisant le passeport dans Node.js
Ce didacticiel montre la création d'une application Web sécurisée Node.js avec authentification locale à l'aide de Passport.js et d'une base de données MongoDB. Nous nous concentrerons sur l'authentification basée sur la session, une approche robuste tirant parti de la gestion et des cookies de session côté serveur.
Concepts clés:
Prérequis:
Assurez-vous que Node.js et MongoDB sont installés. Les instructions pour les installer peuvent être trouvées sur leurs sites Web respectifs. La familiarité avec les concepts Node.js, Express.js et Basic MongoDB est utile.
Configuration du projet:
Créez un répertoire de projet et initialisez un projet Node.js:
<code class="language-bash">mkdir AuthApp cd AuthApp npm init -y</code>
Installez les packages nécessaires:
<code class="language-bash">npm install express body-parser express-session passport passport-local-mongoose mongoose connect-ensure-login</code>
Code côté serveur (index.js
):
<code class="language-javascript">const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const expressSession = require('express-session')({ secret: 'your-secret-key', resave: false, saveUninitialized: false }); const passport = require('passport'); const mongoose = require('mongoose'); const passportLocalMongoose = require('passport-local-mongoose'); const connectEnsureLogin = require('connect-ensure-login'); // MongoDB Connection mongoose.connect('mongodb://localhost/MyDatabase', { useNewUrlParser: true, useUnifiedTopology: true }); // User Schema const userSchema = new mongoose.Schema({ username: String }); userSchema.plugin(passportLocalMongoose); const User = mongoose.model('User', userSchema); // Passport Configuration passport.use(User.createStrategy()); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser()); // Middleware app.use(express.static(__dirname)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(expressSession); app.use(passport.initialize()); app.use(passport.session()); // Routes app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login?info=Invalid credentials' })); app.get('/login', (req, res) => res.sendFile('html/login.html', { root: __dirname })); app.get('/', connectEnsureLogin.ensureLoggedIn(), (req, res) => res.sendFile('html/index.html', { root: __dirname })); app.get('/private', connectEnsureLogin.ensureLoggedIn(), (req, res) => res.sendFile('html/private.html', { root: __dirname })); app.get('/user', connectEnsureLogin.ensureLoggedIn(), (req, res) => res.json({ user: req.user })); const port = process.env.PORT || 3000; app.listen(port, () => console.log(`App listening on port ${port}`)); //Register Sample Users (remove or comment out after initial setup) User.register({username: 'testuser'}, 'password', (err, user) => { if (err) console.error(err); });</code>
Code côté client (HTML & CSS):
Créer des dossiers html
et css
dans la racine de votre projet. Les remplir avec les fichiers HTML nécessaires (index.html
, login.html
, private.html
) et un fichier styles.css
pour le style (reportez-vous à la réponse d'origine par exemple le code). Le JavaScript côté client devra être légèrement ajusté pour correspondre aux voies et réponses mises à jour du serveur.
exécuter l'application:
node index.js
dans votre terminal. http://localhost:3000
. Cette réponse révisée fournit une implémentation plus concise et rationalisée, en se concentrant sur les aspects principaux de l'authentification locale avec Passport.js. N'oubliez pas de remplacer "your-secret-key"
par un secret fort et généré de manière aléatoire. L'exemple d'enregistrement de l'utilisateur doit être supprimé ou commenté après la configuration initiale pour la sécurité. La gestion des erreurs et des fonctionnalités plus robustes peuvent être ajoutées au besoin.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!