📌  相关文章
📜  使用 Passportjs 和 passport-local-mongoose 进行 Node.js 身份验证(1)

📅  最后修改于: 2023-12-03 15:06:49.594000             🧑  作者: Mango

使用 Passport.js 和 passport-local-mongoose 进行 Node.js 身份验证

Node.js 是一种基于 JavaScript 的运行时环境,可用于构建服务器端应用程序。在开发 Web 应用程序时,通常需要为用户提供身份验证功能。 Passport.js 是一个流行的身份验证中间件,它可以轻松地与 Node.js 应用程序集成。 Passport-local-mongoose 是一个 Passport.js 的插件,它提供了与 MongoDB 数据库的无缝集成,可以使我们快速构建身份验证系统。

安装 Passport.js 和 passport-local-mongoose

在使用 Passport.js 和 passport-local-mongoose 之前,需要通过 npm 安装它们。

npm install passport passport-local passport-local-mongoose
配置 Passport.js 和 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 身份验证系统的最佳工具之一。在设置和实现身份验证逻辑时,需要仔细了解这些工具的工作原理,并按照最佳实践进行操作。 如果正确地使用它们,您将能够快速轻松地构建安全的身份验证系统。