千家信息网

Node.js中怎么使用Passport进行本地身份验证

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"Node.js中怎么使用Passport进行本地身份验证",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Node.js中怎么使用Pa
千家信息网最后更新 2026年10月31日Node.js中怎么使用Passport进行本地身份验证

这篇文章主要讲解了"Node.js中怎么使用Passport进行本地身份验证",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Node.js中怎么使用Passport进行本地身份验证"吧!

一、简介

Passport.js是专为 Nodejs 设计的身份验证中间件。passport-local使用通行证策略通过用户名和密码进行身份验证。该模块有助于在 nodejs 应用程序中使用用户名和密码进行身份验证。

1.1 设置 Node.js

要建立的Node.js在Windows上,您将需要前往Node官网下载。选择适用于您平台的安装程序(还包括 NPM 包管理器)并运行安装程序以启动 Node.js 安装向导。按照向导步骤操作,完成后单击"完成"。如果一切顺利,您可以导航到命令提示符以验证安装是否成功,如图 1 所示。

图 1:验证节点和 npm 安装

2. 在 Node.js 中使用 Passport 进行本地身份验证

要设置应用程序,我们需要导航到项目所在的路径。对于编程,我使用Visual Studio Code作为我的首选 IDE。您可以自由选择自己喜欢的 IDE。

2.1 设置实现

让我们编写实际学习所需的不同文件。

2.1.1 设置依赖

导航到项目目录并运行npm init -y以创建package.json文件。该文件包含与项目相关的元数据,用于管理项目依赖项、脚本、版本等。将以下代码添加到文件中,我们将在其中指定所需的依赖项。

{  "name": "passport-app",  "version": "1.0.0",  "description": "",  "main": "server.js",  "scripts": {    "start": "nodemon server.js"  },  "keywords": [],  "author": "",  "license": "ISC",  "dependencies": {    "bcrypt": "^5.0.1",    "ejs": "^3.1.6",    "express": "^4.17.1",    "express-flash": "0.0.2",    "express-session": "^1.17.2",    "method-override": "^3.0.0",    "passport": "^0.4.1",    "passport-local": "^1.0.0"  },  "devDependencies": {    "dotenv": "^10.0.0",    "nodemon": "^2.0.12"  }}

要下载依赖项,请导航到包含该文件的目录路径并使用npm install命令。如果一切顺利,依赖项将加载到node_modules文件夹中,您可以继续执行进一步的步骤。

2.1.2 视图 - 创建欢迎屏幕

在根文件夹中创建一个名为views的文件夹并将以下内容添加到index.ejs. 此屏幕将负责在成功验证后显示欢迎页面。

Hi <%= name %>

2.1.3 查看--创建登录界面

在根文件夹中创建一个名为views的文件夹并将以下内容添加到login.ejs. 此屏幕将负责登录。

Login

<% if (messages.error) { %> <%= messages.error %> <% } %>
Sign up
2.1.4 视图 - 创建注册屏幕

在根文件夹中创建一个名为views的文件夹并将以下内容添加到login.ejs. 此屏幕将负责新用户的注册。

Register

Login
2.1.5 创建通行证配置

在根文件夹中,将以下内容添加到配置文件中。该文件将负责使用用户名和密码配置策略。该策略还需要一个回调,该回调将接受凭据并调用一个done(…)方法来提供用户详细信息。

// adding passport related configuration const LocalStrategy = require("passport-local").Strategy;const bcrypt = require("bcrypt"); function initialize(passport, getUserByEmail, getUserById) {  const authenticateUser = async (email, password, done) => {    const user = getUserByEmail(email);    if (user == null) {      return done(null, false, { message: "User not found" });    }     try {      if (await bcrypt.compare(password, user.password)) {        return done(null, user);      } else {        return done(null, false, { message: "Invalid credentials" });      }    } catch (e) {      return done(e);    }  };   passport.use(new LocalStrategy({ usernameField: "email" }, authenticateUser));  passport.serializeUser((user, done) => done(null, user.id));  passport.deserializeUser((id, done) => {    return done(null, getUserById(id));  });} module.exports = initialize;
2.1.6 创建控制器

在根文件夹中,将以下内容添加到索引文件中。该文件将负责初始化导入、路由并指定通行证配置以验证请求。请记住.env在同一位置创建一个文件并指定敏感信息,例如会话机密、应用程序端口号等。

if (process.env.NODE_ENV !== "production") {  require("dotenv").config();} // importsconst express = require("express");const app = express();const bcrypt = require("bcrypt");const passport = require("passport");const flash = require("express-flash");const session = require("express-session");const methodOverride = require("method-override"); // todo - add external db supportconst users = []; // configuring and initializing passportconst initializePassport = require("./passport-config");initializePassport(  passport,  (email) => users.find((user) => user.email === email),  (id) => users.find((user) => user.id === id)); app.set("view-engine", "ejs");app.use(express.urlencoded({ extended: false }));app.use(flash());app.use(  session({    secret: process.env.SESSION_SECRET || "8unto0n4oc7903zm",    resave: false,    saveUninitialized: false,  }));app.use(passport.initialize());app.use(passport.session());app.use(methodOverride("_method")); // routes // welcome page// display greetings message for the user and logout buttonapp.get("/", checkAuthenticated, (req, res) => {  res.render("index.ejs", { name: req.user.name });}); // login pageapp.get("/login", checkNotAuthenticated, (req, res) => {  res.render("login.ejs");}); app.post(  "/login",  checkNotAuthenticated,  passport.authenticate("local", {    successRedirect: "/",    failureRedirect: "/login",    failureFlash: true,  })); // new user sign-up pageapp.get("/register", checkNotAuthenticated, (req, res) => {  res.render("register.ejs");}); app.post("/register", checkNotAuthenticated, async (req, res) => {  try {    const hashedPassword = await bcrypt.hash(req.body.password, 10);    users.push({      id: "_" + Math.random().toString(36).slice(2),      name: req.body.name,      email: req.body.email,      password: hashedPassword,    });     res.redirect("/login");  } catch (e) {    // console.log(e);    res.redirect("/redirect");  }   // check if the user is successfully added to array  // console.log(users);}); // logout of the applicationapp.delete("/logout", (req, res) => {  req.logOut();  res.redirect("/login");}); // util methods // only authenticated user should enter index pagefunction checkAuthenticated(req, res, next) {  if (req.isAuthenticated()) {    return next();  } else {    res.redirect("/login");  }} // unauthenticated user should not enter index pagefunction checkNotAuthenticated(req, res, next) {  if (req.isAuthenticated()) {    return res.redirect("/");  }  next();} // start serverconst port = process.env.APPLICATION_PORT || 6001;app.listen(port, () => {  console.log("Server listening at http://localhost:%s", port);});

3. 运行应用程序

要运行应用程序,请导航到项目目录并输入以下命令,如图 2 所示。如果一切顺利,应用程序将在从.env文件或6001.

图 2:启动应用程序

感谢各位的阅读,以上就是"Node.js中怎么使用Passport进行本地身份验证"的内容了,经过本文的学习后,相信大家对Node.js中怎么使用Passport进行本地身份验证这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

文件 验证 文件夹 程序 身份 内容 应用程序 应用 屏幕 用户 项目 导航 学习 运行 配置 命令 密码 用户名 目录 策略 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 伟宏互联网科技 高科技互联网 互联网核心科技是什么 西安互联网科技 碳银互联网科技有限公司 互联网高科技企业 互联网科技美容 中盈科技互联网信息有限公司 天速互联网络科技有限公司 中国科技互联网公司收入 剑昆互联网络科技有限公司临桂 央行互联网金融科技公司 厦门千工互联网科技有限公司 互联网科技股为什么大涨 信承诺互联网科技有限公司 江苏互联网智能科技产品出厂价 艺电能源互联网科技有限公司招聘 互联网领先科技成果宣传视频 重庆科技产业互联网有哪些 高科技和互联网的现代国家 中国互联网科技股 互联网 科技 互联网金融 科技创新 中国互联网有什么科技含量 互联网科技商业 洛阳昕诺飞互联网科技有限公司 科技赋能视角下互联网保险发展 互联网安防科技感 广东鹅鹅鹅互联网科技有限公司 科技发展第三阶段互联网时代
0