第七十六课:Node.js 用户身份验证
学习目标
在本课中,我们将专注于以下学习目标:
- 了解用户身份验证的基本概念以及它在现代网络应用中的重要性。
- 学习如何使用 Passport.js 实现用户身份验证。
- 掌握 JSON Web Token(JWT)的基本原理和在 Node.js 中的应用。
- 学习如何结合 Passport.js 和 JWT 创建一个安全的身份验证系统。
学习内容
用户身份验证基本概念
- 用户身份验证 是一种验证用户身份的过程,通常需要用户名和密码。在 Web 应用程序中,这是保护资源不受未授权访问的关键步骤。
使用 Passport.js
- Passport.js 是 Node.js 的中间件,用于简化身份验证过程。它支持多种身份验证策略,如本地、OAuth 和 OpenID 等。
- Passport.js 的工作原理是:通过使用策略(Strategy),来验证用户。策略是一个中间件,定义了验证逻辑。
安装 Passport 和相关策略
npm install passport passport-local passport-jwt jsonwebtoken
示例代码 - 设置 Passport
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
// 这里应连接数据库并验证用户身份
// 为了示例,我们使用一个假设的验证函数
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
JSON Web Token (JWT)
- JSON Web Token (JWT) 是一种开放标准(RFC 7519),定义了一种紧凑、自包含的方式用于在各方之间安全地传输信息作为 JSON 对象。
- JWT 通常用于身份验证和信息交换,它可以被签名(使用 HMAC 算法或 RSA 的公钥/私钥对)。
示例代码 - 使用 JWT
const jwt = require('jsonwebtoken');
// 用户登录后生成 JWT
const user = { id: 1, username: 'john.doe' }; // 应从数据库获取用户信息
const secretKey = 'your_secret_key'; // 应保密并从配置文件加载
const token = jwt.sign({ user: user.id }, secretKey, { expiresIn: '1h' });
// 输出生成的 JWT
console.log(token);
预计输出效果
执行上述代码后,你应该能在控制台看到一个长字符串,这是 JWT 令牌,包含了用户的信息和签名。
课后练习
练习任务
- 创建一个 Node.js 应用程序,并集成 Passport.js。
- 使用本地策略,编写一个简单的登录路由。
- 实施 JWT 生成和验证逻辑。
- 创建一个受保护的路由,必须要 JWT 认证后才能访问。
练习解析
- 集成 Passport.js:在你的 Node.js 应用中引入 Passport.js,并设置使用本地身份验证策略。
- 编写登录路由:创建一个用于处理用户登录请求的路由。在用户验证成功后,生成一个 JWT。
- JWT 逻辑:使用
jsonwebtoken
包来生成和验证 JWT。确保在用户登录时生成的 JWT 在需要验证的路由中进行检查。 - 受保护的路由:一个路由例子是
/profile
,它返回用户的个人信息。使用 Passport.js 提供的 JWT 策略来保护这个路由。
通过完成这些练习,你将学会如何在 Node.js 应用程序中实现安全的用户身份验证系统。这为构建需要用户账户管理的任何类型的 Web 应用程序提供了坚实的基础。