📅  最后修改于: 2023-12-03 15:06:49.594000             🧑  作者: Mango
Node.js 是一种基于 JavaScript 的运行时环境,可用于构建服务器端应用程序。在开发 Web 应用程序时,通常需要为用户提供身份验证功能。 Passport.js 是一个流行的身份验证中间件,它可以轻松地与 Node.js 应用程序集成。 Passport-local-mongoose 是一个 Passport.js 的插件,它提供了与 MongoDB 数据库的无缝集成,可以使我们快速构建身份验证系统。
在使用 Passport.js 和 passport-local-mongoose 之前,需要通过 npm 安装它们。
npm install passport passport-local passport-local-mongoose
Passport.js 和 passport-local-mongoose 配置的第一步是引入它们。
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const passportLocalMongoose = require('passport-local-mongoose');
接下来,我们需要在应用程序中设置 Passport.js。
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
这里,我们使用 passport.initialize()
初始化 Passport.js,并使用 passport.session()
配置 session 存储。 然后,我们使用 passport.serializeUser()
和 passport.deserializeUser()
设置用于序列化和反序列化用户的方法。
接下来,我们使用 passport-local-mongoose 创建一个新的 Mongoose 模型并将其用于身份验证。
const User = new mongoose.Schema({
username: String,
password: String,
});
User.plugin(passportLocalMongoose);
const UserModel = mongoose.model('User', User);
这里,我们创建一个名为 User 的 Mongoose 模型,其中包括用户名和密码字段。然后,在用户模式上使用 passportLocalMongoose
插件,以便将用户身份验证的操作委托给插件。最后,我们将模型导出为 UserModel
。
我们已经设置好了 Passport.js 和 passport-local-mongoose,现在可以实现身份验证逻辑。 首先,我们需要设置本地策略,以便在用户尝试登录时使用。
passport.use(new LocalStrategy(User.authenticate()));
这里,我们使用 passport.use()
创建一个新的本地策略。在这个策略中,我们使用 User 模型的 authenticate()
方法进行身份验证。
接下来,我们需要设置两个路由,一个用于渲染登录表单,另一个在用户提交表单时进行身份验证。 在第一个路由中,我们简单地呈现一个带有用户名和密码字段的表单。
app.get('/login', (req, res) => {
res.render('login');
});
在第二个路由中,我们使用 passport.authenticate()
函数对用户进行身份验证。如果身份验证成功,我们将用户重定向到受保护的页面。如果失败,则将用户重定向回登录页面。
app.post('/login', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
}));
Passport.js 和 passport-local-mongoose 是构建 Node.js 身份验证系统的最佳工具之一。在设置和实现身份验证逻辑时,需要仔细了解这些工具的工作原理,并按照最佳实践进行操作。 如果正确地使用它们,您将能够快速轻松地构建安全的身份验证系统。